---------------------------------------------------------------------------java
轉載:http://blog.csdn.net/arui319
android
---------------------------------------------------------------------------
app
如何作到開機啓動?ide
只要實現一個BroadcastReceiver,監聽手機啓動完成的事件ACTION_BOOT_COMPLETED便可。須要注意的是,好像不能用模擬器,要用手機測試。測試
那如何作到啓動一個Service,而且在用戶關閉後能自動又啓動了呢?ui
通常的,都會在上面說到的BroadcastReceiver的實現裏面,監聽手機啓動完成後,啓動一個Service,這是通常的作法。問題是,用戶能夠關閉掉該Service。那麼怎樣才能使它被關閉掉之後,再次啓動呢?聰明的你必定當即就想到了,若是不直接啓動Service,而是啓動一個timmer,或者alarmManager,而後每隔一段時間去啓動Service,就能夠了。spa
[java] view plaincopyprint?.net
package com.arui.framework.android.daemonservice; orm
import android.app.AlarmManager; blog
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;
public class BootBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent mintent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(mintent.getAction())) {
// 啓動完成
Intent intent = new Intent(context, Alarmreceiver.class);
intent.setAction("arui.alarm.action");
PendingIntent sender = PendingIntent.getBroadcast(context, 0,
intent, 0);
long firstime = SystemClock.elapsedRealtime();
AlarmManager am = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
// 10秒一個週期,不停的發送廣播
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,
10 * 1000, sender);
}
}
}
[java] view plaincopyprint?
package com.arui.framework.android.daemonservice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class Alarmreceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("arui.alarm.action")) {
Intent i = new Intent();
i.setClass(context, DaemonService.class);
// 啓動service
// 屢次調用startService並不會啓動多個service 而是會屢次調用onStart
context.startService(i);
}
}
}
[java] view plaincopyprint?
package com.arui.framework.android.daemonservice;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class DaemonService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.v("=========", "***** DaemonService *****: onCreate");
}
@Override
public void onStart(Intent intent, int startId) {
Log.v("=========", "***** DaemonService *****: onStart");
// 這裏能夠作Service該作的事
}
}
[java] view plaincopyprint?
<receiver
android:name=" com.arui.framework.android.daemonservice.BootBroadcast"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver
android:name=" com.arui.framework.android.daemonservice.Alarmreceiver" >
<intent-filter>
<action android:name="arui.alarm.action" />
</intent-filter>
</receiver>
<service
android:name=" com.arui.framework.android.daemonservice.DaemonService" >
</service>