Android服务开机自启动

时间:2022-07-11 15:40:23

新任务需要Android程序开机跑一个服务,查找资料得出如下方法:

用广播的方法监听系统启动事件:android.intent.action.BOOT_COMPLETED

并在AndroidManifest.xml加入广播监听事件信息

1 <receiver android:name="AutoStartReceiver"> 
2 <intent-filter>
3 <!-- 系统启动完成后会调用-->
4 <action android:name="android.intent.action.BOOT_COMPLETED">
5 </action>
6 </intent-filter>
7 </receiver>


广播监听类:

 1 public class AutoStartReceiver extends BroadcastReceiver {
2 /* 要接收的intent源 */
3 static final String ACTION = "android.intent.action.BOOT_COMPLETED";
4
5 public void onReceive(Context context, Intent intent) {
6 if (intent.getAction().equals(ACTION)) {
7 context.startService(new Intent(context, LocalService.class));// 启动服务
8 }
9 }
10
11 }

另外,看了一篇博文(来自:不许联想),文中使用如下方法实现开机定时服务:

 1 public class BootReceiver extends BroadcastReceiver { 
2 private PendingIntent mAlarmSender;
3 @Override
4 public void onReceive(Context context, Intent intent) {
5 // 在这里干你想干的事(启动一个Service,Activity等),本例是启动一个定时调度程序,每30分钟启动一个Service去更新数据
6 mAlarmSender = PendingIntent.getService(context, 0, new Intent(context,
7 RefreshDataService.class), 0);
8 long firstTime = SystemClock.elapsedRealtime();
9 AlarmManager am = (AlarmManager) context
10 .getSystemService(Activity.ALARM_SERVICE);
11 am.cancel(mAlarmSender);
12 am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime,
13 30 * 60 * 1000, mAlarmSender);
14 }
15 }

但是,这种方法好像无法启动SD卡上的应用的服务。明细待查。