重启手机后应该启动一项服务。为此,我制作了一个接收器,并在 Manifesto(我发现)中给了它必要的条件。
有 3 部手机,它们都有完全不同的行为。
红米手机 4x 安卓 7.1.2。只是不想工作。
联想 K5 笔记。安卓 5.1。此处服务在重新启动后启动,仅当服务在重新启动之前运行时
三星 Galaxy S5 安卓 6.0.1。这里一切似乎都很好。没有区别“服务是否在此之前启动?没有?”。重新启动后,服务将启动。
我的接收者
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent intentService = new Intent(context, MusicServ.class);
context.startService(intentService);
}
}
宣言
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<service
android:name=".MusicServ"
android:enabled="true"
android:exported="true"
android:process=":MusicServ">
</service>
<receiver
android:name=".MyReceiver"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="android.intent.action.REBOOT"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
不幸的是,这是一个众所周知的问题,许多 Android 设备制造商(通常是中国)修改系统,使默认应用程序无法在后台运行,直到用户明确启动它们(固件停止应用程序服务,并且不发送系统事件到通过意图应用程序)。)。Galaxy S5 运行正常(就像普通的 Android 一样),而 Redmi 4x 和联想 K5 Note 则没有。不幸的是,对此无能为力,除了检测设备制造商并向用户显示一个对话框,建议将应用程序添加到“白名单”中。例如,在小米 (MIUI) 上,将应用程序添加到自动运行、设置活动控制 - 无限制以及将应用程序固定到最近列表应该会有所帮助。
正如ACTION_BOOT_COMPLETED 文档所说:
所以,结果不可预测的原因是完全可以理解的。