SMSを送信する方法があります。このメソッドは、送信レポートと配信レポートを受け取る 2 つの保留中のインテントを登録します。
最初のメッセージを送信し、その送信レポートと配信レポートを受信してから、別のメッセージを送信します。2 番目のメッセージのレポートを受信しているときに、最初のメッセージと 2 番目のメッセージのレポートを受け取ります。別のメッセージを送信すると、1 番目と 2 番目のメッセージのレポートを受け取り、次に 3 番目のメッセージのレポートを受け取ります。
どうしたの?
ソース:
public void sendSms(String phoneNumber, String cmd ...) {
sentPI = PendingIntent.getBroadcast(this, sendSmsCounter++, new Intent(SENT), PendingIntent.FLAG_CANCEL_CURRENT);
deliveredPI = PendingIntent.getBroadcast(this, deliverCounter++, new Intent(DELIVERED), PendingIntent.FLAG_CANCEL_CURRENT);
sendingBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode())
{
case Activity.RESULT_OK:
displayMessage("Sms Sent");
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
displayMessage("Sending SMS error: Generic failure");
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
displayMessage("Sending SMS error: No service");
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
displayMessage("Sending SMS error: Null PDU");
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
displayMessage("Sending SMS error: Radio off");
break;
}
}
};
this.registerReceiver(sendingBroadcastReceiver, new IntentFilter(SENT));
deliveryBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode())
{
case Activity.RESULT_OK:
displayMessage("SMS Delivered");
break;
case Activity.RESULT_CANCELED:
displayMessage("SMS delivery error: SMS Canceled");
break;
}
}
};
this.registerReceiver(deliveryBroadcastReceiver, new IntentFilter(DELIVERED));
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, cmd, sentPI, deliveredPI);