有没有办法通过应用程序,我可以订阅和取消订阅“ACTION_BOOT_COMPLETED”消息?
如果是这样,我该怎么做?
任何类型的指针都会对我有帮助。
提前致谢,
问候,
维奈
答案 0 :(得分:1)
结帐my answer至this question。这些链接。
http://www.androidcompetencycenter.com/2009/06/start-service-at-boot/
Trying to start a service on boot on Android
Android: how to start a service at boot based on user-settings?
答案 1 :(得分:1)
执行此操作的最佳方法是使用PackageManager.setComponentEnabledSetting():http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName,int,int)
因此,通过在清单中设置android:enabled,可以简单地决定是否要默认启用接收。然后使用此API在运行时根据需要显式启用或禁用该组件。如果禁用该组件,则在启动时它将不可用,因此不会接收广播。
答案 2 :(得分:0)
事实上,有:
您的启动接收器:
public class BootstrapReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context cntxt, Intent intent) {
String action = intent.getAction();
if(Intent.ACTION_BOOT_COMPLETED.equals(action)) {
// do your thing
}
}
}
添加接收者和接收引导事件的权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
....
<receiver android:name=".BootstrapReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
通过应用程序(如果你想以编程方式添加/删除启动接收器而不是通过AndroidManifest.xml,请使用此项。但请记住,您仍需要在AndroidManifest.xml中声明启动权限)
Context ctx = getContext();
BootstrapReceiver booter = new BootstrapReceiver();
IntentFilter filter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED);
ctx.registerReceiver(booter, filter);
取消注册:
ctx.unregisterReceiver(booter);