Когда я отправляю SMS, иногда код результата = 0. Что означает этот код? - PullRequest
6 голосов
/ 05 декабря 2011
smsManager.sendMultipartTextMessage(
                mDests[i], mServiceCenter, messages,
                sentIntents, deliveryIntents);

В моем SmsReceiver (sentIntents) иногда я получаю getResultCode() = 0.

Согласно документации: http://developer.android.com/reference/android/telephony/SmsManager.html

Это означает STATUS_ON_ICC_FREE.Но я не могу понять, что это такое.При возврате - СМС не отправляются.

Что это значит и как это исправить?В чем причина STATUS_ON_ICC_FREE?

Ответы [ 3 ]

3 голосов
/ 05 декабря 2011

Вы просто сравниваете код результата с неверной константой. SmsManager.sendMultipartTextMessage В Javadoc четко указаны возможные значения, возвращаемые getResultCode() в трансляции sentIntents:

The result code will be Activity.RESULT_OK for success, or one of these errors:
RESULT_ERROR_GENERIC_FAILURE
RESULT_ERROR_RADIO_OFF
RESULT_ERROR_NULL_PDU

По моему мнению, STATUS_ON_ICC_xxx константы были добавлены в публичный API по ошибке, поскольку они используются только скрытыми методами класса SmsManager: copyMessageToIcc, deleteMessageFromIcc и т. Д.

UPDATE

Однако это не объясняет, почему вы получаете 0 от getResultCode(). Поскольку ни одна из этих констант не равна нулю (Activity.RESULT_CANCEL = 0, но об этом нет никакого упоминания в SmsManager javadoc). Быстрый поиск через Android Источники также не дают никакой подсказки, откуда взялась 0.

Возможно, что другое приложение перехватит широковещательную рассылку sentIntent и вызовет setResultCode явно. Однако до сих пор я был уверен, что в Android невозможно предотвратить отправку SMS на уровне приложения.

2 голосов
/ 05 декабря 2011

Javadoc говорит Free space (TS 51.011 10.5.3 / 3GPP2 C.S0023 3.4.27)..Спецификации 3GPP2 говорят 3GPP2 C.S0023 3.4.27 status

Я ничего не знаю о SMS, но, насколько я понимаю, это "свободное пространство" противоположно "используемому пространству" (xx1 это фактически определяет статусы, такие как 001 полученный и прочитанный; 011 receveid & для чтения; и т. д.)

Я бы сказал, что этот статус ничего не значит ...

В коде AndroidЯ обнаружил только одну ссылку на STATUS_ON_ICC_FREE: deleteMessageFromIcc() обновляет сообщение с таким статусом, когда сообщение было успешно удалено с SIM-карты (иначе ICC)

0 голосов
/ 30 ноября 2013

Вы пишете, что используете следующее для отправки текста:
smsManager.sendTextMessage(destination, null, message, null, null);

Почему вы не используете параметр sentIntent, который может сообщить вам, было ли ваше сообщение принято сетью?

Из документации:

sentIntent, если не NULL, этот PendingIntent транслируется при успешной отправке или сбое сообщения.Код результата будет Activity.RESULT_OK для успеха или одна из следующих ошибок:

RESULT_ERROR_GENERIC_FAILURE
RESULT_ERROR_RADIO_OFF
RESULT_ERROR_NULL_PDU

смс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...