新任务需要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卡上的应用的服务。明细待查。