开机启动服务的关键点是,当android启动完毕后,android会广播一次android.intent.action.BOOT_COMPLETED。如果想在启动后执行自己的代码,需要编写一个广播的接收者,并且
注册接收者到这个广播intent上。
这里以android中使用定时任务代码为例,将它的服务改为开机启动。
首先,需要编写一个intent的receiver,比如SmsServiceBootReceiver:
package com.easymorse;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class SmsServiceBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent myIntent = new Intent();
myIntent.setAction("com.easymorse.SmsService");
context.startService(myIntent);
}
}
通过这个Receiver,启动SmsService。那么怎么让这个Receiver
工作呢,需要把它注册到android
系统上,去监听广播的BOOT_COMPLETED intent。在AndroidManifest.
xml中:
package="com.easymorse" android:versionCode="1″ android:versionName="1.0″>
<uses-sdk android:minSdkVersion="3″ />
增加黑体字部分的内容即可。
这样重新开机,服务在开机android系统启动完毕后就会加载。再启动Activity绑定(binding)服务,就可以操作SmsService服务,如果Activity解除绑定,也不会shutdown服务了。
是不是Service会有一个引用计数呢?当计数是0的时候就会shutdown。还要再找时间研究。
源代码见:
??
??
??
??