2011-12-05 11 views
6
smsManager.sendMultipartTextMessage(
       mDests[i], mServiceCenter, messages, 
       sentIntents, deliveryIntents); 

En mi SmsReceiver (sentIntents) a veces recibo getResultCode() = 0.Cuando envío SMS, a veces el resultado es código = 0. ¿Qué significa ese código?

De acuerdo con la documentación: http://developer.android.com/reference/android/telephony/SmsManager.html

Significa STATUS_ON_ICC_FREE. Pero no puedo entender lo que es. Cuando se devuelve: los SMS no se envían.

¿Qué significa esto y cómo solucionarlo? ¿Cuál es el motivo de STATUS_ON_ICC_FREE?

+0

Buena pregunta: \. Este sitio web muestra una muestra: http://hi-android.info/src/com/android/internal/telephony/gsm/SimSmsInterfaceManager.java.html que capta ese valor de retorno. ICC es su tarjeta SIM, y lo que hacen cuando captan ese mensaje es eliminar algo de la tarjeta SIM. ¿Tal vez la tarjeta SIM está llena? (incluso su referencia a TS 51.011 10.5.3 no responde ninguna pregunta ...) – Yuri

Respuesta

3

Simplemente está comparando el código de resultado con la constante incorrecta. SmsManager.sendMultipartTextMessage Javadoc establece claramente acerca de los posibles valores devueltos por la getResultCode() en el sentIntents emisión:

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 

En mi opinión STATUS_ON_ICC_xxx constantes se añadieron a la API pública, por error, ya que sólo se utilizan por métodos ocultos de la clase SmsManager: copyMessageToIcc, etc. deleteMessageFromIcc

ACTUALIZACIÓN

sin embargo, esto no explica por qué recibe usted 0 de getResultCode(). Como ninguna de estas constantes es igual a cero (Activity.RESULT_CANCEL = 0 pero no se menciona en el SmsManager javadoc). Quick search a través de fuentes de Android también no da ninguna pista si 0 podría proceder.

Una posibilidad podría ser que alguna otra aplicación tome la difusión sentIntent y llame al setResultCode explícitamente. Sin embargo, hasta ahora estaba seguro de que es imposible en Android evitar que los SMS se envíen a nivel de aplicación.

2

El javadoc dice Free space (TS 51.011 10.5.3/3GPP2 C.S0023 3.4.27).. El 3GPP2 specifications dicen 3GPP2 C.S0023 3.4.27 status

No sé nada acerca de SMS, pero por lo que entiendo, este "espacio libre" se opone al "espacio utilizado" (xx1 que realmente define como estados recibieron 001 & de lectura; 011 receveid & para ser leído; etc.)

me dice este estado no significa nada ...

En el código de Android, he encontrado una sola referencia a STATUS_ON_ICC_FREE: deleteMessageFromIcc() actualiza el mensaje con este estado cuando el mensaje ha sido exitosamente es eliminado de la tarjeta SIM (también conocido como ICC)

0

Usted escribe que utiliza lo siguiente para enviar un texto:
smsManager.sendTextMessage(destination, null, message, null, null);

¿Por qué no utilizar el parámetro sentIntent que puede decirle si su mensaje fue aceptado por la red?

De la documentación:

sentIntent si no es NULL esta PendingIntent se emite cuando el mensaje se envió con éxito, o ha fallado.El código de resultado será Activity.RESULT_OK para el éxito, o uno de estos errores:

RESULT_ERROR_GENERIC_FAILURE 
RESULT_ERROR_RADIO_OFF 
RESULT_ERROR_NULL_PDU 

sms

Cuestiones relacionadas