如何注册侦听" 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中注册它)。然后它显示这个屏幕:
然后我点击"完成"并使用" install"返回到我的活动按钮。我想知道它是否无法正常工作,因为它启动了屏幕截图中显示的活动,因此无法在我的接收器中调用onReceive方法,因为我的活动的onPause方法已被调用且不是&#39 ; t"活跃"直到我点击完成,这是在" PACKAGE_ADDED"之后行动被召唤。
答案 0 :(得分:2)
|intent filter object|.addDataScheme("package");
PackageManager只会将其发送给具有该意图行为 AND 数据方案为'package'的接收者。
答案 1 :(得分:-1)
听起来您想要控制清单中发布的组件是否处于活动状态,而不是在运行时动态注册接收器(通过Context.registerReceiver())。
如果是这样,您可以使用PackageManager.setComponentEnabledSetting()来控制这些组件是否处于活动状态:
请注意,如果您只对在运行时接收广播感兴趣,最好使用registerReceiver()。当您需要确保每次发送广播时都启动应用程序时,接收器组件非常有用。