2013-06-05 113 views
3

我對Android和編程一般都很陌生,所以我正在玩弄不同的 教程和在這裏收集的信息在stackoverflow上。讓BroadcastReceiver作爲服務在後臺運行+啓動後自動啓動

我想完成的是將應用程序與我的SMS BroadcastReceiver作爲服務運行,以便在應用程序處於後臺時可以獲取所有SMS廣播。

另外,如何添加BroadcastReceiver來接收BOOT_COMPLETED的廣播並自動啓動應用程序?

我需要多個服務嗎?或者1個服務是否足夠? (用於連續檢測SMS + BOOT_COMPLETED)

目前我已經創建了一個用於獲取SMS的BroadcastReceiver,就像這樣;

public class SMS extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    .. etc .. 
    .. etc .. 
} 

和我的AndroidManifest.xml文件有接收器和意圖過濾器與 額外android.provider.Telephony.SMS_RECEIVED

獲取短信播報工作正常,但我不知道在哪裏可以從這裏走。

所有幫助非常感謝:)

謝謝。

+0

你知道在Android中,「服務」與Windows中的「服務」不同*對吧?運行服務不斷花費電池。也許你想要的是一個IntentService,它在處理完髮送給它的所有待處理的Intents(例如通過你的廣播接收器)之後會自行停止。 – Fildor

+0

是的,如果我理解正確的概念,它會消耗電池。 但我正在尋找解決方案,以便如何不斷從BroadcastReceiver獲取SMS。 :) – ole

+0

如果我沒有記錯,系統會調用您的BroadCastReceiver。無需服務。請有人糾正我或確認這一點,因爲我不是100%肯定。 – Fildor

回答

1

要在BOOT_COMPLETED事件中啓動服務並持續接收SMS意向。

的AndroidManifest.xml

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

BootReceiver.java

public class BootReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent service = new Intent(context, SMSService.class); 
     context.startService(service); 
    } 
} 

SMSService.java

public class SMSService extends IntentService { 
    @Override 
    protected void onHandleIntent(Intent intent) { 
     String action = intent.getAction(); 
     if (Intent.BOOT_COMPLETED.equals(action)) { 
      //write your code to process BOOT_COMPLETED intent here 
     } 
     else if(Intent.SMS_RECEIVED.equals(action)) { 
      //Write your code for processing SMS intent here 
     } 
    } 
} 

As,Fildor已經指出,沒有必要在BOOT_COMPLETED意圖上啓動服務。 InentService會完成這項工作。所以,上面的兩個代碼片段不是必需的。只是最後一個片段會完成這項工作。

+0

那真是太棒了。你的意思是我根本不需要實例化任何BroadcastReceivers或者Services,只需使用IntentService來BOOT_COMPLETED和SMS_RECEIVED? (順便說一句,IntentService顯示爲一個正在運行的服務?) 感謝您的幫助,將嘗試一下,讓你知道它是如何工作的:) – ole

+0

if(android.intent.action.BOOT_COMPLETED.equals(action) )這行爲我拋出錯誤,android.intent不能解析爲什麼這個錯誤來了@mopurizwarriors –

+0

如果(intent.getAction()。等於(Intent.ACTION_BOOT_COMPLETED))這段代碼是有用的,如果任何人有錯誤 –

相關問題