2013-05-04 11 views
1

某人(成員「buptcoder」)幫助我解決了我所遇到的問題,非常快速,很好。我很高興在這裏找到了一個社區。感謝大家。Android - 無法理解重啓後服務如何運行

我已經閱讀了很多關於「在啓動時啓動服務」的網頁,但我仍然有一個疑問。

這裏是我已經有的代碼: 我點擊一個運行服務的按鈕(在一個Activity中),該服務註冊了一個BroadcastReceiver(SMS_RECEIVED)。當我點擊後退按鈕(Google Android按鈕)時,服務(和BroadcastReceiver)仍處於活動狀態。好。

這是我想要的: 即使用戶重新啓動手機,我也希望該服務(已由按鈕激活)自動重啓。服務的激活是動態的,如果用戶沒有按下按鈕,我不希望它運行。

我知道我應該使用操作BOOT_COMPLETED,但我不明白我們如何才能完全做到這一點。

如果有人能理解我寫的,並幫助我:)

感謝。

回答

1

你提到:I know I should use action BOOT_COMPLETED but I can't understand how we can do it exactly.

你想知道如何可以使用BOOT_COMPLETED行動?要使用該功能,您需要對Manifest文件進行一些更改。您在清單中指定接收方的位置,您可以在<intent-filter>標記中添加一個操作。東西如下:

<receiver android:name=".Receiver" > 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     .... 
    </intent-filter> 
</receiver> 

內,您的廣播接收機的OnReceive功能,你可以做你想做當接收BOOT_COMPLETE做任何動作。喜歡的東西:

//Inside your BroadCast Receiver: 
@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent.getAction()!= null){ 
     if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){ 
      // Do something here 
     } 
    } 
} 

您可能還需要添加此權限

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

希望這有助於其他人請評論。

0

不客氣:)。 Shobhit Puri很好地問了你的問題。我想爲你的問題添加一些。 如果你只是想監控短信,你甚至不必寫一個服務。只要寫一個接收器,並說明它在你的AndroidManifest.xml中,接收器將工作做好,即使用戶重啓設備:如果你想接收器甚至重新啓動後,工作

<receiver android:name=".YourSmsReceiver" > 
<intent-filter> 
    <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
    .... 
</intent-filter> 
</receiver> 

    //Inside your YourSmsReceiver 
@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent.getAction()!= null){ 
     if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ 
      // Handle SMS here 
     } 
    } 
} 
+0

只是增加了它,我認爲,你需要包含BOOT_COMPLETED。這裏有很多線程。檢查[這](http://stackoverflow.com/questions/6878816/broadcastreceiver-not-working-after-boot-completed)和[this](http://stackoverflow.com/questions/5082735/broadcast-receiver-未工薪後重新啓動)。 – 2013-05-04 03:49:45

+0

謝謝你們兩位。你的答案解決了我的問題的一部分。事實上,我提到我希望Android知道用戶是否按下了按鈕(激活服務)。如果沒有,我不希望Android在啓動時啓動我的服務。這是一個動態註冊。我認爲如果我在清單文件中硬編碼它不會是動態的。也許我應該像使用SMS_RECEIVED一樣通過addAction動態添加動作(BOOT_COMPLETED)。 (對於buptcoder:我將有多個服務,正如我在之前的消息中所寫的,按鈕啓動一個註冊廣播接收器的服務)。謝謝。 – frontal 2013-05-04 10:20:19