Итак, я получаю эту трассировку стека:
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 когда-то давно хотя это может быть неактуально, так как я вижу, что некоторые номера строк не совпадают.
Экстренная кнопка проекта с открытым исходным кодом, поэтому вы можете проверить код для справки. Наверное, стоит заметить, что я сам не могу это проверить, у меня нет ни одной модели телефона.