如何以编程方式注册监听“PACKAGE_ADDED”操作的 BroadcastReceiver?安装软件包后,我正在尝试做一些事情。我可以通过在 AndroidManifest.xml 中注册接收器来使其工作,但我需要通过以编程方式注册它来使其以另一种方式工作,以便它仅在通过我的应用程序安装的 .apks 上被调用。我已经尝试了几种不同的方式,下面的代码来自这个答案 https://stackoverflow.com/a/4805733/1024722但它不起作用。有什么想法吗?
private BroadcastReceiver receiver;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ButterKnife.inject(this);
intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.v("test", "received");
}
};
registerReceiver(receiver, intentFilter);
}
编辑:在我的应用程序 Activity 中,我单击一个按钮从服务器下载该应用程序,然后在我的通知栏中单击已下载的应用程序进行安装。然后它会显示此屏幕:
我单击“安装”,它会安装但不会调用我的 onReceive 方法(除非我在 xml 中注册它)。然后它显示这个屏幕:
然后我单击“完成”,它会返回到我的“安装”按钮的 Activity 。我想知道它是否不起作用,因为它启动了屏幕截图中显示的 Activity ,因此无法在我的接收器中调用 onReceive 方法,因为我的 Activity 的 onPause 方法已被调用并且在我单击完成之前不再“Activity ” ,这是在调用“PACKAGE_ADDED”操作之后。
最佳答案
|intent filter object|.addDataScheme("package");
PackageManager 只会将其发送给具有该 Intent 操作并且数据方案为“包”的接收者。
关于android - 如何以编程方式使用 BroadCastReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26454339/