开机启动一个service需要做的工作如下:
1、开发一个receiver用于接收系统广播;
public class BootReceiver extends BroadcastReceiver { public static final String TAG = "bootReceiver"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction().toString(); if (action.equals(Intent.ACTION_BOOT_COMPLETED)) { Intent service = new Intent(context, LocateService.class); context.startService(service); return; } } }
2、添加mainifest,配合广播的接收和添加权限;
<receiver android:name="com.example.receiver.BootReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" >
</action> </intent-filter> </receiver> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
3、完成service部分。
调试service:
在Android中service的调试和普通的Application不同,如果仅仅设置断点的话,调试器是不会在你的断点处停下来的,解决方法就是:
在代码中声明,以便让调试器能到你声明的地方。你只需加入下面这一句代码即可:
android.os.Debug.waitForDebugger();
你的断点可以设置在这句调用后面任何地方。
经验总结:
1、2.3版本以后 系统提供快速启动选项,如果使用,系统不会发开机完成的系统广播;
2、3.1以后,安装程序要启动一次才会运行接受系统广播,为了防止恶意的内置应用;
3、手机软件如360,定制系统如小米等,会设置禁止应用自启动,如果不在白名单,同样收不到系统广播;
4、不调试的时候要把 android.os.Debug.waitForDebugger(); 去掉,否则应用会启动黑屏,等待调试;