2010-12-12 30 views
2

這是我的廣播接收機。從廣播接收機發送意圖到Android中的正在運行的服務

public class SmsReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context ctx, Intent intent) { 
      Log.d(DEBUG_TAG, SmsReceiver.class.getSimpleName()+ " action: " + intent.getAction()); 
      // here is codes for sending intent to my running service 

    } } 

這裏是我的清單xml文件中廣播接收器和服務節點。

<service android:name=".SMSGatewayService" /> 

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

我該如何將廣播接收機的意圖發送到我正在運行的服務。 在此先感謝。

回答

10

理想情況下,您沒有正在運行的服務。服務應該只在內存中,當他們做某事的時候,你的代碼在SMS到達時不會做任何事情。

這就是說,您的接收器可以撥打startService()。這通過服務的IntentonStartCommand(),無論它是否已在運行。理想情況下,您的服務是一個IntentService,一個設計用於處理命令模式並在處理完命令後關閉。

此外,由於SMS消息可在設備處於睡眠狀態時到達,因此您可能需要使用WakeLock以確保設備保持足夠長的時間以使控制權傳遞給服務,並使服務能夠執行任何操作是在做。一種方法是使用我的WakefulIntentService,其中包含IntentService + WakeLock模式。

相關問題