基本上我已经设置了一个引导接收器,如下所示:
<receiver
android:name="com.xxx.xxx.XXX.BootUpReciever"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
<intent-filter android:priority="999" >
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver> code here
现在这似乎大部分时间都可以正常工作。它会在正常启动时启动并继续做它需要做的事情。但是,如果我将它与我开发的另一个应用程序结合使用,尽管仍在注册,但接收器永远不会被调用。
我总是确保首先运行应用程序以便它被注册,所以不是这样。如果我卸载其他应用程序,它可以工作。他们确实有一个共享用户,但我认为这与它没有太大关系,因为我在许多可以很好地组合使用的应用程序中使用它。这只是它无法相处的一个特定应用程序。
编辑:
我确实有<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
,否则它根本不起作用。
以及引导接收器本身:
public class BootUpReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent args) {
incBootCounter(context);
Intent i = new Intent(context, HomeScreenActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
private void incBootCounter(Context ctx) {
SharedPreferences s = PreferenceManager.getDefaultSharedPreferences(ctx);
if (s != null) {
Editor edit = s.edit();
if (edit != null) {
edit.putInt("how_many_times_have_we_booted", s.getInt("how_many_times_have_we_booted", 0) + 1);
edit.commit();
}
}
}
}
需要指出的是,这不是 Google Play 商店或其他任何地方的应用程序。这是一个非常具体的应用程序,仅部署到我们作为公司拥有的设备上。
编辑2:
我在日志中找到了一些帮助。安装其他应用程序后,我收到以下消息:
W/BroadcastQueue( 986): Permission Denial: receiving Intent { act=android.intent.action.BOOT_COMPLETED flg=0x8000010 (has extras) } to com.xxx.xxx.xxxxxxxxx/.BootUpReciever requires android.permission.RECEIVE_BOOT_COMPLETED due to sender null (uid 1000)
如果没有其他应用程序,我会收到以下消息:
I/ActivityManager( 980): Start proc com.xxx.xxx.xxxxxx for broadcast com.sps.smc.SMCKiosk/.BootUpReciever: pid=1656 uid=10109 gids={50109, 3003, 3002, 3001, 1028, 1015}