2010-12-12 7 views
2

ここは私の放送受信機です。アンドロイドで放送中の受信者から実行中のサービスにインテントを送信

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()と呼ぶことができます。これは、既に実行中かどうかにかかわらず、サービスのIntent〜を渡します。理想的には、あなたのサービスはIntentServiceです。コマンドパターンを処理し、コマンドの処理が終了したらシャットダウンするように設計されています。

また、デバイスがスリープ状態になっている間にSMSメッセージが届く可能性があるため、デバイスが制御をサービスに渡すのに十分な長時間スリープ状態に留まり、サービスがそれを実行するためにはおそらくWakeLockを使用する必要がありますやっている。このための1つのアプローチは、 + WakeLockパターンを包括する私のWakefulIntentServiceを使用することです。

関連する問題