Главная » Разработка для Android » Отслеживание и подтверждение  доставки SMS

0

Чтобы  отслеживать и подтверждать  успешность  доставки  своих ис- ходящих SMS, реализуйте и зарегистрируйте Приемники широковеща- тельных намерений. Они должны быть настроены  на действия,  указанные вами при создании  Ожидающих намерений, которые  вы передали  в метод sendTextMessage.

Первое  Намерение, sentIntent, срабатывает,  когда сообщение  успешно отправляется (либо когда возникают  какие-то  проблемы).  Код результата для Приемника, который  получает  данное Намерение, будет иметь одно из следующих значений:

Activity.RESULT_OK — успешная отправка;

SmsManager.RESULT_ERROR_GENERIC_FAILURE — при отправ- ке возникли неизвестные проблемы;

SmsManager.RESULT_ERROR_RADIO_OFF — телефонный модуль выключен;

SmsManager.RESULT_ERROR_NULL_PDU — возникла проблема, связанная с форматом PDU (protocol description unit).

Второе Намерение, deliveryIntent, срабатывает  только после того, как адресат получил ваше сообщение.

В листинге  12.16 показан  типичный  шаблон для отправки  SMS и от- слеживания успешности его передачи и доставки.

Листинг 12.16. Отслеживание доставки SMS

String SENT_SMS_ACTION = "SENT_SMS_ACTION";

String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";

// Создайте параметр sentIntent

Intent sentIntent = new Intent(SENT_SMS_ACTION);

PendingIntent sentPI = PendingIntent.getBroadcast(getApplicationContext(),

0, sentIntent,

0);

// Создайте параметр deliveryIntent

Intent deliveryIntent = new Intent(DELIVERED_SMS_ACTION); PendingIntent deliverPI =

PendingIntent.getBroadcast(getApplicationContext(),

Продолжение ?

Листинг 12.16 (продолжение)

0, deliveryIntent,

0);

// Зарегистрируйте Приемники Широковещательных Намерений registerReceiver(new BroadcastReceiver() {

@Override

public void onReceive(Context _context, Intent _

intent)

{

switch (getResultCode()) {

case Activity.RESULT_OK:

[ . . . действия при успешной отправке . . . ];

break;

case SmsManager.RESULT_ERROR_GENERIC_FAILURE: [ . . . действия при неизвестных

проблемах . . . ]; break;

case SmsManager.RESULT_ERROR_RADIO_OFF:

[ . . . действия при выключенном телефонном модуле . . . ]; break;

case SmsManager.RESULT_ERROR_NULL_PDU:

[ . . . действия при возникновении проблем, связанных с форматом PDU . . . ]; break;

}

}

},

new IntentFilter(SENT_SMS_ACTION));

registerReceiver(new BroadcastReceiver() {

@Override

public void onReceive(Context _context, Intent _intent)

{

[ . . . Действия при успешной доставке SMS . . . ]

}

},

new IntentFilter(DELIVERED_SMS_ACTION));

// Отправьте сообщение

smsManager.sendTextMessage(sendTo, null, myMessage, sentPI, deliverPI);

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии