2011-08-15 14 views
5

だから、これは私のBroadcastReceiverBroadcastReceiverからSMSを送信し、ステータスを確認するにはどうすればよいですか?

public class IncomingSMSListener extends BroadcastReceiver { 
private static final String SMS_EXTRA_NAME = "pdus"; 

@Override 
public void onReceive(Context context, Intent intent) { 
    SmsMessage[] messages = fetchSMSMessagesFromIntent(intent); 
} 

private SmsMessage[] fetchSMSMessagesFromIntent(Intent intent) { 
    ArrayList<SmsMessage> receivedMessages = new ArrayList<SmsMessage>(); 
    Object[] messages = (Object[]) intent.getExtras().get(SMS_EXTRA_NAME); 
    for (Object message : messages) { 
     SmsMessage finalMessage = SmsMessage 
       .createFromPdu((byte[]) message); 
     receivedMessages.add(finalMessage); 
    } 
    return receivedMessages.toArray(new SmsMessage[0]); 
} 

}

私はちょうど罰金と、すべての着信メッセージを読んで、しかし、のは、私は別の電話番号にメッセージを転送したいここから言わせすることができるということだし、それが送信されたことを確認してください。私はSmsManager.sendTextMessage()を行うことができることを知っていますが、PendingIntentの部分にSMSが送信されたかどうかを通知するように設定するにはどうすればよいですか?

答えて

6

OK、最後に解決策を見つけることになった。 BroadCastReceiverのonReceive()メソッドに渡されたコンテキストは、他のBroadcastReceiversを登録して「メッセージ送信」イベントをリスンすることはできないため、次のようにアプリケーションコンテキストを把握しました。

BroadcastReceiverで

SmsManager smsManager = SmsManager.getDefault(); 
    Intent intent = new Intent(SENT_SMS_FLAG); 
    PendingIntent sentIntent = PendingIntent.getBroadcast(context, 0, 
      intent, 0); 
    SMSForwarderApp.getAppContext().registerReceiver(
      new MessageSentListener(), 
      new IntentFilter(SENT_SMS_FLAG)); 
    smsManager.sendTextMessage("Here goes the destination of the SMS", null, 
      "Here goes the content of the SMS", sentIntent, null); 

SENT_SMS_FLAGは単に一意私はちょうど作ら意図を識別する静的ストリングです。あなたが複数のエントリ、私が直面した問題に直面する可能性MessageSentListenerあなたが登録解除されなかった場合

public class MessageSentListener extends BroadcastReceiver{ 

@Override 
public void onReceive(Context context, Intent intent) { 
    int resultCode = this.getResultCode(); 
    boolean successfullySent = resultCode == Activity.RESULT_OK; 
    //That boolean up there indicates the status of the message 
    SMSForwarderApp.getAppContext().unregisterReceiver(this); 
      //Notice how I get the app context again here and unregister this broadcast 
      //receiver to clear it from the system since it won't be used again 
} 

}

+0

:私のMessageSentListenerはこのようになります。ありがとうございました! –