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

在我的SmsReceiver(sentIntents)有時我收到getResultCode() = 0當我發送短信,有時結果代碼= 0.那個代碼是什麼意思?

根據文檔:http://developer.android.com/reference/android/telephony/SmsManager.html

這意味着STATUS_ON_ICC_FREE。但我不明白它是什麼。 返回時 - SMS不發送。

這是什麼意思和如何解決它? STATUS_ON_ICC_FREE是什麼原因?

+0

問得好:\。本網站列出了一個示例:http://hi-android.info/src/com/android/internal/telephony/gsm/SimSmsInterfaceManager.java.html,它捕獲返回值。 ICC是您的SIM卡,他們在收到該消息時所做的是從SIM中刪除某些內容。也許SIM卡已滿? (即使他們提到TS 51.011 10.5.3也沒有真正回答任何問題......) – Yuri

回答

3

您只是將結果代碼與錯誤的常量進行比較。 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類的隱藏方法僅用於: copyMessageToIccdeleteMessageFromIcc

UPDATE

但是這並不能解釋爲什麼你從01收到。由於這兩個常數都不等於零(Activity.RESULT_CANCEL = 0,但在javadoc中沒有提及它)。 Quick search通過Android來源也不給線索0可能來自。

其中一種可能性是某些其他應用程序可能會捕獲顯示廣播的sentIntent並呼叫setResultCode。不過,我確定到現在爲止,Android不可能阻止SMS在應用程序級別發送。

2

javadoc說Free space (TS 51.011 10.5.3/3GPP2 C.S0023 3.4.27).。該3GPP2 specifications3GPP2 C.S0023 3.4.27 status

我不知道短信什麼,但是從我的理解,這個「自由空間」是相對於「已用空間」(xx1實際上定義的狀態,如001接受&讀取; 011 receveid &被讀取;等等)

我會說這種地位並不意味着什麼......

在Android的代碼,我發現只有一個參考STATUS_ON_ICC_FREEdeleteMessageFromIcc()與此更新的消息消息成功時的狀態從SIM卡(又名ICC)刪除

0

你寫你使用以下方法來發送短信:
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 

sms