当我使用SmsManager
发送短信时,广播的结果意图值为5
Activity.RESULT_OK
SmsManager.RESULT_ERROR_GENERIC_FAILURE
SmsManager.RESULT_ERROR_NO_SERVICE
SmsManager.RESULT_ERROR_NULL_PDU
SmsManager.RESULT_ERROR_RADIO_OFF
每个人的意思是什么?请提一个可以产生每一个的测试用例。 我知道RESULT_OK表示成功发送的短信。一般错误发生GENERIC_FAILURE(例如,我没有信用)。
但我已启动飞行模式并尝试发送短信。我认为它会触发NO_SERVICE错误,但是触发了RADIO_OFF。官方文档也没有很好地证明它们。
答案 0 :(得分:12)
以下是我对documentation of SmsManager:
的评论 RESULT_ERROR_GENERIC_FAILURE
:通用失败原因
出了点问题,没有办法说出什么,为什么或如何。
RESULT_ERROR_NO_SERVICE
:因服务当前不可用而失败
您的设备根本没有接收信元。你可能处在不知名的地方,在某个地方,地下或太空中。当然远离任何手机塔。
RESULT_ERROR_NULL_PDU
:失败,因为没有提供pdu
SMS堆栈中出现问题,同时使用protocol description unit (PDU)进行操作(很可能将其放在一起进行传输)。
RESULT_ERROR_RADIO_OFF
:因无线电被明确关闭而失败
您将设备切换为飞行模式,告诉您的设备“完全关闭所有无线电”(手机,wifi,蓝牙,NFC等)。
最后,大多数应用程序无需关心为什么发送短信失败(除了询问用户是否在RESULT_ERROR_RADIO_OFF
的情况下启用飞行模式),因为应用程序本身没有任何内容可以做些补救。
答案 1 :(得分:2)
<强> SmsManager.RESULT_ERROR_GENERIC_FAILURE 强>
大多数情况下,如果短信息太长,则会出现此错误。在这种情况下使用这个:
ArrayList<String> texts = smsManager.divideMessage(text);
smsManager.sendMultipartTextMessage(phone, null, texts, null, null)
答案 2 :(得分:2)
应该可以更多地了解RESULT_ERROR_GENERIC_FAILURE背后的原因。在收到SMS发送结果的接收器中:
string searchTerm = "myChild.myField";
string searchValue = "C";
Field searchField = new Field(searchTerm);
ISearchResponse<MyParent> result =
Client.Search<MyParent>(s =>
s.Query(q => q.Term(searchField, searchValue)));
if (result != null &&
result.Documents != null &&
result.Documents.Count != 0)
{
...
}
我还没有证明这一点,但是列表提供here和here提供@Override
public void onReceive(Context context, Intent intent) {
// Other code processing other outcomes
if (getResult() == SmsManager.RESULT_ERROR_GENERIC_FAILURE) {
int errorCode = intent.getIntExtra("errorCode", -1);
if (errorCode != -1) {
// process errorCode ...
}
}
// More code ...
}
的解释。首字母缩略词here提供了如何理解这些列表的一些解释。例如:
号码问题
其他问题
在我看来,代码之间存在相当多的重叠,但我并不是这些事情的专家。