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

Nel mio SmsReceiver (sentIntents) a volte ricevo getResultCode() = 0.Quando invio SMS, a volte il codice risultato = 0. Che cosa significa questo codice?

Secondo la documentazione: http://developer.android.com/reference/android/telephony/SmsManager.html

Significa STATUS_ON_ICC_FREE. Ma non riesco a capire di cosa si tratta. Quando viene restituito, gli SMS non vengono inviati.

Cosa significa e come risolverlo? Qual è la ragione di STATUS_ON_ICC_FREE?

+0

Bella domanda: \. Questo sito Web elenca un esempio: http://hi-android.info/src/com/android/internal/telephony/gsm/SimSmsInterfaceManager.java.html che rileva il valore restituito. ICC è la tua SIM-card e quello che fanno quando rilevano quel messaggio è rimuovere qualcosa dalla SIM. Forse la SIM-card è piena? (anche il loro riferimento a TS 51.011 10.5.3 in realtà non risponde a nessuna domanda ...) – Yuri

risposta

3

Stai solo confrontando il codice risultato con la costante sbagliata. SmsManager.sendMultipartTextMessage Javadoc afferma chiaramente circa i possibili valori restituiti dalla getResultCode() nella sentIntents trasmissione:

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 

a mio parere STATUS_ON_ICC_xxx costanti sono stati aggiunti alla API pubblica per errore dal momento che sono utilizzati solo da metodi nascosti della classe SmsManager: copyMessageToIcc, deleteMessageFromIcc ecc

UPDATE

Tuttavia questo non spiega il motivo per cui si riceve 0 da getResultCode(). Poiché nessuna di queste costanti è uguale a zero (Activity.RESULT_CANCEL = 0 ma non ne viene menzionato nel javadoc SmsManager). Quick search tramite Android Sources, inoltre, non fornisce alcun indizio che potrebbe provenire da 0.

Una possibilità potrebbe essere che qualche altra applicazione catturi la trasmissione sentIntent e chiami esplicitamente setResultCode. Tuttavia ero sicuro fino ad ora che è impossibile in Android impedire l'invio degli SMS a livello di applicazione.

2

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

Io non so niente di SMS, ma da quanto ho capito, questo "spazio libero" si oppone alla "spazio utilizzato" (xx1 che definisce in realtà stati quali 001 hanno ricevuto & lettura; 011 receveid & da leggere; etc.)

mi dice questo stato non significa nulla ...

Nel codice di Android, ho trovato un solo riferimento a STATUS_ON_ICC_FREE: deleteMessageFromIcc() aggiorna il messaggio con questo stato quando il messaggio è stato correttamente it cancellato dalla scheda SIM (alias ICC)

0

Lei scrive che si utilizza la seguente per inviare un testo:
smsManager.sendTextMessage(destination, null, message, null, null);

Perché non utilizza il parametro sentIntent che può dire se il messaggio è stato accettato dalla rete?

Dalla documentazione:

sentIntent se non nullo questo PendingIntent viene trasmesso quando il messaggio viene inviato con successo, o non è riuscito.Il codice risultato sarà Activity.RESULT_OK per il successo, o di uno di questi errori:

RESULT_ERROR_GENERIC_FAILURE 
RESULT_ERROR_RADIO_OFF 
RESULT_ERROR_NULL_PDU 

sms