觀念:
在開機後自動啟動Activity或Service, 主要是利用Android手機在開機完成後,
會發送一個BOOT_COMPLETED, 開機完成的訊息,
所以要在APP上寫一個Receiver來接收該訊息
之後利用Intent去啟動Activity或Service
實作:
1. 首先先來實作開機後自動執行Service的部分,
開啟Eclipse, 建立一個新專案, 然後創建一個class繼承Service,
並實作其內部onBind的方法
2. 接著在建立一個class, 繼承BroadcastReceiver, 並實作onReceive的方法
這邊以Reciver為例
3. 接著用intent.getAction()來接收訊息, 並在收到的訊息為
Intent.ACTION_BOOT_COMPLETED的時候做動作
4. 在裡面利用Intent去啟動Service, 內容如下
Intent serviceIntent = new Intent(context, BootService.class);
context.startService(serviceIntent);
5. 上述完成之後, 切換到AndroidManifest.xml, 首先需要開啟此接收開機完成訊息的權限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
6. 並在application內, 註冊這個Reciver
<receiver android:name=".Reciver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
7. Reciver註冊完後, 要把需要開啟的Service也註冊進去
<service android:name="com.example.test.BootService"/>
到這裡就已經完成了開機後自動啟動Service的部分
8. 接著來加入開機後自動執行Activity的部分, 加入的部分如同步驟4,
也是利用Intent去啟動activity
Intent activityIntent = new Intent(context, MainActivity.class);
activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(activityIntent);
這邊要注意的是, Intent要加入.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
9. 完成之後將程式載入到Android或是模擬器上
10. 如果你是用模擬器的話, 可以用對adb下command的方式來讓他重開機
步驟如下:
(a) 開啟命令提示字元到 編譯器安裝入徑\sdk\platform-tools,
ex: D:\adt-bundle-windows-x86_64-20140702\sdk\platform-tools
(b) 輸入 adb shell 按下Enter
(c) 輸入 am broadcast -a android.intent.action.BOOT_COMPLETED 按下Enter
11. 重啟後, 就會發現該APP啟動後執行了, 測完之後記得刪掉測試APP,
才不會一直發動該機製
12. 而Service檢查的方式有很多, 介紹一個最簡單的方法,
到Setting裡面的Apps, 查看RUNNING的部分,
如果你的APP除了Process之外還有Service,
就代表你成功了