有很多像这样的答案 https://stackoverflow.com/a/19856367/7742857,但我仍然没有得到我想要的解决方案。
是清单文件
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<service android:name=".MyService" />
<receiver
android:name=".RestartService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
这是服务类,我没有使用 onStartCommand((;
@Override
public void onTaskRemoved(Intent rootIntent) {
Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass());
restartServiceIntent.setPackage(getPackageName());
PendingIntent restartServicePendingIntent = PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
assert alarmService != null;
alarmService.set(
AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + 1000,
restartServicePendingIntent);
super.onTaskRemoved(rootIntent);
Log.e("Service_Auto_Restart", "ON");
}
此类位于服务类内
class TimeDisplayTimerTask extends TimerTask {
@Override
public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
Timer();
}
});
}
}
这是广角班
public class RestartService extends BroadcastReceiver {
MyService myService;
MyService.TimeDisplayTimerTask timeDisplayTimerTask;
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
context.startService(new Intent(context,MyService.class));
myService.getPackagesList("package_names");
myService.getTimer("SELECTED_TIME");
myService.Timer();
timeDisplayTimerTask.run();
Toast.makeText(context,"Restarted",Toast.LENGTH_LONG).show();
}
}
}
如果您能够提供任何帮助,我将不胜感激。
您的 BroadcastReceiver 类已损坏。 您永远不能拥有服务的实例。 在你自己的代码中,它永远不会初始化,它只会导致一个NullPointerException。 所以你很可能会得到一个并崩溃。
你不需要服务来做到这一点,你实际上可以在广播中做到这一点。 我正在使用 kotlin,我只是调用另一个函数来完成工作,但它都在我的广播中。