这个实现起来其实相当简单,没做过的人只是有点怀疑而已。有一个原理明白了即可,安装程序后,程序所带的服务也会带入android系统中,可以把它想象成独立于程序的另一个东东。
写一个广播,监听开机,这个广播也是在程序中的,但可以想象成独立于程序的另一个东东。也就是,不开启程序,这些广播和服务也是管用的,跟程序开不开启没有关系。
具体做法:只要安装了程序,程序里面已经写了服务与广播,就好了,开机后,广播会接收到已开机,就按要求完成具体操作,本例中就是开启服务,事实上,开启服务也是广播最广泛的作用,服务中则可以做任何操作。
public class BootReceiver extends BroadcastReceiver { private PendingIntent mAlarmSender; @Override public void onReceive(Context context, Intent intent) { // 在这里干你想干的事(启动一个Service,Activity等),本例是启动一个定时调度程序,每30分钟开启一次服务,服务从头开始执行功能到执行结束 mAlarmSender = PendingIntent.getService(context, 0, new Intent(context, RefreshDataService.class), 0); long firstTime = SystemClock.elapsedRealtime(); AlarmManager am = (AlarmManager) context .getSystemService(Activity.ALARM_SERVICE); am.cancel(mAlarmSender); am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 30 * 60 * 1000, mAlarmSender); } }
当然,服务和广播都需要注册在配置文件AndroidManifest.xml中:
<receiver android:name=".service.BootReceiver"> <intent-filter> <!-- 系统启动完成后会调用--> <action android:name="android.intent.action.BOOT_COMPLETED"> </action> </intent-filter> </receiver>