boot_completed动作以编程方式注册而不是在清单中注册

Nav*_*mar 0 android intentfilter broadcastreceiver android-manifest bootcompleted

我试图以编程方式注册接收器以进行操作android.intent.action.BOOT_COMPLETED,即让我接收一个名为BootReceiver 的接收器类,它扩展了BroadCastReceiver类.

所以在我的一个活动课中我编写了这段代码,

IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.intent.action.BOOT_COMPLETED");
        intentFilter.addAction("android.intent.action.PACKAGE_REPLACED");

        BootReceiver receiver = new BootReceiver();
        getApplicationContext().registerReceiver(receiver, intentFilter);
Run Code Online (Sandbox Code Playgroud)

我试图同时更新app以及boot_completed动作到同一个广播接收器.

所以我尝试的是,我通过注册上面的代码运行活动,然后重新启动设备.我没有得到任何回调BootReceiver onReceive()方法.

是否可以以编程方式为boot_completed操作声明接收器,或者是否有必要在清单文件中声明接收器.

实际上我的要求是以编程方式声明它.

提前致谢.

Com*_*are 5

我试图以编程方式为actionandroid.intent.action.BOOT_COMPLETED注册一个接收器

registerReceiver()被调用时,启动将很久以来发生.注册的唯一地方android.intent.action.BOOT_COMPLETED是清单,因为即使您没有运行进程,它也可以注册对广播的兴趣.

是否可以以编程方式为boot_completed操作声明接收器

不,您可以申请,但它永远不会有效.

是否有必要在清单文件中声明接收器

如果你想要一个人工作,是的.

  • @NaveenKumar:正确.`registerReceiver()`只有在你调用`unregisterReceiver()`或者你的进程被终止时才有效.您的进程将在重新启动过程中终止.如果你的"要求"只是在你需要它的情况下只响应`BOOT_COMPLETED`,使用`PackageManager`和`setComponentEnabledSetting()`来切换你的`BOOT_COMPLETED`接收器是否被启用.如果禁用,接收器将无法控制重启. (2认同)