所以我得到了这个堆栈跟踪:
java.lang.NullPointerException
at android.telephony.SmsMessage$SubmitPdu.<init>(SmsMessage.java:132)
at android.telephony.SmsMessage.getSubmitPdu(SmsMessage.java:551)
at android.telephony.SmsManager.sendTextMessage(SmsManager.java:228)
at android.telephony.SmsManager.sendTextMessage(SmsManager.java:107)
at com.emergency.button.SMSSender.safeSendSMS(SMSSender.java:91)
at com.emergency.button.EmergencyActivity$EmergencyThread
.sendSMS(EmergencyActivity.java:294)
at com.emergency.button.EmergencyActivity$EmergencyThread
.sendMessages(EmergencyActivity.java:386)
at com.emergency.button.EmergencyActivity$EmergencyThread
.run(EmergencyActivity.java:266)
Run Code Online (Sandbox Code Playgroud)
这就是我调用sendTextMessage的方式,我不验证消息长度或电话号码的有效性:
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
Run Code Online (Sandbox Code Playgroud)
这个错误似乎只发生在HTC Desire或HTC Wildfire与Android 2.2或2.21上,所以我挖出了android平台源码(这实际上并不像我预期的那么容易)并且发现:
SmsMessage.java曾经一度虽然这可能不相关,因为我看到一些行号没有对齐.
该紧急按钮项目是开源的,所以你可以检查出来的代码以供参考.我应该注意到我自己无法测试,我没有手机型号.
小智 17
您可能会使用太长的消息来解决此问题.我不知道为什么它只会发生在某些手机上.
http://code.google.com/p/android/issues/detail?id=3718
更换
sms.sendDataMessage(destinationAddress, scAddress, destinationPort, data, sentIntent, deliveryIntent)
Run Code Online (Sandbox Code Playgroud)
通过
sms.sendMultipartTextMessage(phoneNumber, null, message, null, null);
Run Code Online (Sandbox Code Playgroud)
您的消息必须是ArrayList,在调用sendSMS之前使用此方法
SmsManager sms = SmsManager.getDefault();
ArrayList<String> parts = sms.divideMessage(locationMessage);
sendSMS(telNumber.getText().toString(),parts );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4689 次 |
| 最近记录: |