Итак, я получаю эту трассировку стека:
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)
И вот как я вызываю sendTextMessage, я не проверяю длину сообщения или правильность номера телефона:
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
Эта ошибка возникает только в HTC Desire или HTC Wildfire с версией Android 2.2 или 2.21, поэтому я откопал исходный код платформы Android (что на самом деле не так просто, как я ожидал) и нашел:
SmsMessage.java когда-то хотя это может не иметь значения, поскольку я вижу, что некоторые номера строк не совпадают.
Проект аварийной кнопки имеет открытый исходный код, поэтому вы можете ознакомиться с кодом. Должен, наверное, заметить, что сам протестировать не могу, у меня нет ни одной модели телефона.