新任务需要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卡上的应用的服务。明细待查。
浙公网安备 33010602011771号