// AndroidManifest.xml中添加Service声明
<service android:name=".BootService"
android:enabled="true"
android:exported="false"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
// BootReceiver.java - 用于接收开机广播
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
Intent serviceIntent = new Intent(context, BootService.class);
context.startService(serviceIntent);
}
}
}
// BootService.java - 开机启动的服务
public class BootService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null; // 不需要绑定
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 在这里执行开机后需要执行的操作
Log.d("BootService", "Service started on boot completed.");
// 如果需要长期运行,可以返回 START_STICKY
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("BootService", "Service destroyed.");
}
}
// 不要忘记在AndroidManifest.xml中注册BootReceiver
<receiver android:name=".BootReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
// 注意:从Android 8.0(API 级别 26)开始,如果应用的目标是API级别26或更高,并且应用没有在设备的用户界面中可见(即,它不是前台应用),则系统会对这些应用的隐式广播施加限制。
// 因此,如果目标是API 26或更高,可能需要其他方式(如JobScheduler)来实现开机启动任务。
以上是一个简单的Android开机启动服务的示例。注意,从Android 8.0(API级别26)开始,对于隐式广播的限制可能需要您考虑使用其他机制(如JobScheduler)来在设备启动时执行任务,除非应用在前台运行或有其他特殊权限。此外,确保您的应用已经获得了`RECEIVE_BOOT_COMPLETED`权限,并且该权限在AndroidManifest.xml中声明。