我正在使用Android编写代码,但我正在编写的项目没有GUI,也从不为用户更新视图。它只是通过广播接收器监听最后安装的应用程序,并将信息发送到另一个java文件。
我想知道如何从一个广播接收器发送一个字符串到一个活动(也许这不应该是一个“活动”,而是一个“服务”?),并有这项工作,而应用程序在后台。
现在,我有一个广播接收器监听我的手机上最后一个安装的应用程序(这是在后台运行的)。我已经设置了一个自定义广播接收器,当广播接收器获得安装的应用程序时,通知我的主要活动。但是这个定制接收器在后台不能工作。再次,也许我不应该使用一个活动从BroadcastReceiver接收信息?
,当应用程序处于后台时,我是否可以将信息从广播接收器发送到我的主要活动中?我还需要在后台恢复正常功能的主要活动(在后台没有进行GUI更新)。
我的BroadcastReceiver,它通过一个新的意图向我的主要活动发送数据。
public class NewInstallReceiver extends BroadcastReceiver {
ApplicationInfo ai;
@Override
public void onReceive(Context context, Intent intent) {
final PackageManager pm = context.getPackageManager();
try {
// if app is added, get package info
ai = pm.getApplicationInfo(intent.getData().getSchemeSpecificPart(), 0);
Intent i = new Intent("broadcastName");
// Data pass to activity
i.putExtra("appInfo", ai);
context.sendBroadcast(i);
} catch (final PackageManager.NameNotFoundException e) {
ai = null;
}
}
}
在“我的MainActivity In onCreate”中,我注册了接收器:
registerReceiver(broadcastReceiver, new IntentFilter("broadcastName"));
我从BroadcastReceiver接收数据
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// get applicationInfo
Bundle b = intent.getExtras();
Object applicationInfo = b.get("appInfo");
ApplicationInfo appInfo = (ApplicationInfo) applicationInfo;
getNewData(appInfo);
}
};
然后我必须在MainActivity中注销接收者,但显然这不允许我在应用程序进入后台后从BroadcastReceiver接收信息。
@Override
public void onStop()
{
try{
unregisterReceiver(broadcastReceiver);
}
catch(Exception e){
System.out.println("Exception is " + e.toString());
}
super.onStop();
}
发布于 2016-07-04 20:02:42
老实说,我不认为更新背景活动是一个很好的实践(即使可能)。
根据文档
一个活动是一个单一的,集中的事情,用户可以做。几乎所有的活动都与用户交互,因此Activity类负责为您创建一个窗口,您可以在其中使用setContentView(视图)放置UI。虽然活动通常以全屏窗口的形式呈现给用户,但也可以以其他方式使用:作为浮动窗口.或者嵌入到另一个活动中(使用ActivityGroup)。
因此,如果活动在背景中,则不可见。因此,更新其内容是无用的(因为它对用户是不可见的)。
实际上,您应该实现以下行为:
onResume()
方法期间更新活动内容。onCreate()
方法期间更新所有视图。在视图显示给用户之前调用onCreate()
。这样,信息将在需要时被更新:时,用户会检查信息。否则,这是浪费时间。
https://stackoverflow.com/questions/38191098
复制相似问题