我正在使用Android Studio编写代码,但我正在编写的项目没有GUI,并且从不更新用户的视图。它仅仅监听上一个安装的应用程序,然后将信息发送到另一个Java文件。
我想知道如何从广播接收器向活动(也许不应该是“activity”,而是“service”?)发送字符串,并在应用程序在后台运行时实现此功能。
目前,我有一个广播接收器在我手机上监听最后安装的应用程序(这在后台运行)。我设置了一个自定义广播接收器来通知我的主活动当广播接收器得到了安装的应用程序。但是这个自定义接收器在后台不起作用。或许我不应该使用Activity来接收BroadcastReceiver的信息?
在应用程序在后台运行时,是否有一种方法可以从广播接收器向我的主活动发送信息?同时,我需要我的主活动在后台恢复正常功能(在后台没有GUI更新)。
我的BroadcastReceiver通过新Intent将数据发送到我的主活动
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中的onCreate方法中,我注册了一个接收器:
registerReceiver(broadcastReceiver, new IntentFilter("broadcastName"));
我接收来自广播接收器的数据。
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中取消注册接收器,但显然这样做将不允许我在应用程序转入后台时从广播接收器接收信息。
@Override
public void onStop()
{
try{
unregisterReceiver(broadcastReceiver);
}
catch(Exception e){
System.out.println("Exception is " + e.toString());
}
super.onStop();
}