在Android手机或车机启动的过程中会触发一个Standard Broadcast Action android.intent.action.BOOT_COMPLETED(只会触发一次),因此我们只需构建一个广播接收者来接收这个action来启动我们的Service即可。
(1)在Mainfest.xml中配置权限、注册register及service
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="对应你的service包名"> //监听开机的权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application android:allowBackup="true" android:supportsRtl="true"> <service android:name=".StartService" android:enabled="true" android:exported="true" /> <receiver android:name="receiver.StartReceiver"> <intent-filter android:priority="100"> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> </application> </manifest>(2)需要启动的Service
import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.util.Log; public class StartService extends Service { public static final String TAG = "startService"; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d(TAG, "service is started"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); } }(3)构建Register
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import com.hryt.service.StartService; public class StartReceiver extends BroadcastReceiver { public static final String TAG = "StartReceiver"; public static final String ACTION ="android.intent.action.BOOT_COMPLETED"; @Override public void onReceive(Context context, Intent intent) { Log.d(TAG,"receiver broadcast "+intent); if (intent.getAction().equals(ACTION)) { context.startService(new Intent(context, StartService.class)); } } }