【发布时间】:2014-10-19 19:16:43
【问题描述】:
如何以编程方式注册监听“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);
}
编辑:在我的应用程序的活动中,我单击一个按钮从服务器下载应用程序,然后安装它我单击通知栏中下载的应用程序。然后它会显示这个屏幕:
我单击“安装”并安装但不调用我的 onReceive 方法(除非我在 xml 中注册它)。然后它显示这个屏幕:
然后我点击“完成”,它会通过“安装”按钮返回到我的活动。我想知道它是否不起作用,因为它启动了屏幕截图中显示的活动,因此无法在我的接收器中调用 onReceive 方法,因为我的活动的 onPause 方法已被调用并且在我单击完成之前不再“活动” ,这是在调用“PACKAGE_ADDED”操作之后。
【问题讨论】:
-
代码正确。我正在使用这个并且工作正常。你是怎么测试的?
-
我运行了我的应用程序,然后用它安装了一个包,我的 onReceive 方法从未被调用过。但是,当我在我的 AndroidManifest 中注册接收器时,它会被调用