0

我希望我的服务在 android 重新启动时启动。我使用 BroadcastReceiver 来做到这一点。

public class autostart extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    MyService1 mYourService = new MyService1();
    MainActivity.instance_main.showToast("BroadCast Received...................");
    Intent mServiceIntent = new Intent(MainActivity.instance_main, mYourService.getClass());
    if (!MainActivity.instance_main.isMyServiceRunning(mYourService.getClass())) {
        MainActivity.instance_main.startService(mServiceIntent);
        MainActivity.instance_main.showToast("Restarted...................");
    }
    else {
        MainActivity.instance_main.showToast("already running..................");
    }
  }
}

Android Manifest 中的接收器

<receiver android:name=".autostart" 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>

定义的权限

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>

OnCreate() 中还请求了电池优化忽略权限

Intent intent=new Intent();
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:"+MainActivity.instance_main.getPackageName()));
MainActivity.instance_main.startActivity(intent);

但它不会起作用。服务不会在重新启动时启动。请建议我解决方案。

4

1 回答 1

0

我们需要注册接收器。将以下代码添加到 OnCreate()

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    BroadcastReceiver mService=new Autostart();
    registerReceiver(mService,filter);

但是重新启动后它不会自动命中。

于 2021-04-14T06:26:19.700 回答