[Android] 開機後(Boot up)自動啟動Service
(How to start a service on boot)
Broadcast Receiver Component讓APP即使不是在執行的狀態下也能接收由系統或是其它APP所廣播的Intent訊息,要實現boot up完成自動執行Service就必須針對開機完成這項動作註冊一個Broadcast Receiver,讓它在接收Intent之後啟動目標Service即可。
以下將透過一個簡單的例子說明實作方法,讓系統開機後自動啟動一個Service發送歡迎通知給使用者。
程式碼說明
1. 建立Broadcast Receiver以及設定其Intent-filter針對android.intent.action.BOOT_COMPLETED動作進行註冊,並記得在use-permission tag加入android.permission.RECEIVE_BOOT_COMPLETED,使其可以接收System broadcast intent。
package com.bootupServiceDemo; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class BootUpReceiver extends BroadcastReceiver{ @Override public void onReceive(Context c, Intent intent) { if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){ Intent sIntent = new Intent(c,BootUpService.class); c.startService(sIntent); } } }2. 建立發送歡迎訊息的Service,在其onCreate方法發送一個歡迎訊息至Status Bar。
package com.bootupServiceDemo; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.IBinder; public class BootUpService extends Service { @Override public void onCreate(){ Notification msg=new Notification(R.drawable.icon,"Welcome",System.currentTimeMillis()); Intent nIntent=new Intent(this,DemoActivity.class); PendingIntent pIntent=PendingIntent.getActivity(this,0,nIntent,0); msg.setLatestEventInfo(this,"Title","content",pIntent); NotificationManager manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); manager.notify(1,msg); } @Override public IBinder onBind(Intent arg0) { return null; } }3. 安裝至Device,重新開機後將會看到上方自動發送一個歡迎通知,boot up completely自動啟動的Service就大功告成了。
留言
張貼留言