Почему я получаю NullPointerException при отправке SMS на HTC Desire, или что такое SubmitPdu? - PullRequest
8 голосов
/ 03 января 2011

Итак, я получаю эту трассировку стека:

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

Ответы [ 4 ]

17 голосов
/ 10 января 2011

Возможно, вы столкнулись с этой проблемой из-за слишком длинного сообщения. Я не знаю, почему это произошло бы только с некоторыми телефонами.

http://code.google.com/p/android/issues/detail?id=3718

7 голосов
/ 27 августа 2011

Заменить

sms.sendDataMessage(destinationAddress, scAddress, destinationPort, data, sentIntent, deliveryIntent)

на

sms.sendMultipartTextMessage(phoneNumber, null, message, null, null);

Для этого ваше сообщение должно быть ArrayList, используйте этот метод перед вызовом sendSMS

SmsManager sms = SmsManager.getDefault();
ArrayList<String> parts = sms.divideMessage(locationMessage);
sendSMS(telNumber.getText().toString(),parts );
0 голосов
/ 03 января 2011

Вы должны отменить регистрацию отправленного смс-сообщения и отправленного смс-сообщения после использования, Одна вещь, которую вы можете сделать, объявить намеренные Приемники как отдельный класс, который расширяет BraodCast, Тогда вы можете отменить регистрацию получателей.

0 голосов
/ 03 января 2011

Не ответ, но слишком долго, чтобы оставлять комментарии ...

Я думаю, что у вас может быть несколько проблем - не знаю, что это может значить для вас, но я подключил свое желание к DDMS и попробовал. SMS и электронная почта были отправлены без проблем (без ошибок в трассировке стека), но это то, что я получил при использовании кнопки НАЗАД из Действия, которая показывает прогресс (ожидание местоположения, отправка электронной почты, отправка SMS и т. Д.).

01-03 02:57:11.335: ERROR/ActivityThread(14514): Activity com.emergency.button.EmergencyActivity has leaked IntentReceiver com.emergency.button.SMSSender$3@4628f068 that was originally registered here. Are you missing a call to unregisterReceiver()?
01-03 02:57:11.335: ERROR/ActivityThread(14514): android.app.IntentReceiverLeaked: Activity com.emergency.button.EmergencyActivity has leaked IntentReceiver com.emergency.button.SMSSender$3@4628f068 that was originally registered here. Are you missing a call to unregisterReceiver()?
01-03 02:57:11.335: ERROR/ActivityThread(14514):     at android.app.ActivityThread$PackageInfo$ReceiverDispatcher.<init>(ActivityThread.java:972)
01-03 02:57:11.335: ERROR/ActivityThread(14514):     at android.app.ActivityThread$PackageInfo.getReceiverDispatcher(ActivityThread.java:755)
01-03 02:57:11.335: ERROR/ActivityThread(14514):     at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:799)
01-03 02:57:11.335: ERROR/ActivityThread(14514):     at android.app.ContextImpl.registerReceiver(ContextImpl.java:786)
01-03 02:57:11.335: ERROR/ActivityThread(14514):     at android.app.ContextImpl.registerReceiver(ContextImpl.java:780)
01-03 02:57:11.335: ERROR/ActivityThread(14514):     at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318)
01-03 02:57:11.335: ERROR/ActivityThread(14514):     at com.emergency.button.SMSSender.safeSendSMS(SMSSender.java:75)
01-03 02:57:11.335: ERROR/ActivityThread(14514):     at com.emergency.button.EmergencyActivity$EmergencyThread.sendSMS(EmergencyActivity.java:294)
01-03 02:57:11.335: ERROR/ActivityThread(14514):     at com.emergency.button.EmergencyActivity$EmergencyThread.sendMessages(EmergencyActivity.java:386)
01-03 02:57:11.335: ERROR/ActivityThread(14514):     at com.emergency.button.EmergencyActivity$EmergencyThread.run(EmergencyActivity.java:266)
01-03 02:57:11.345: ERROR/ActivityThread(14514): Activity com.emergency.button.EmergencyActivity has leaked IntentReceiver com.emergency.button.SMSSender$2@462b1e88 that was originally registered here. Are you missing a call to unregisterReceiver()?
01-03 02:57:11.345: ERROR/ActivityThread(14514): android.app.IntentReceiverLeaked: Activity com.emergency.button.EmergencyActivity has leaked IntentReceiver com.emergency.button.SMSSender$2@462b1e88 that was originally registered here. Are you missing a call to unregisterReceiver()?
01-03 02:57:11.345: ERROR/ActivityThread(14514):     at android.app.ActivityThread$PackageInfo$ReceiverDispatcher.<init>(ActivityThread.java:972)
01-03 02:57:11.345: ERROR/ActivityThread(14514):     at android.app.ActivityThread$PackageInfo.getReceiverDispatcher(ActivityThread.java:755)
01-03 02:57:11.345: ERROR/ActivityThread(14514):     at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:799)
01-03 02:57:11.345: ERROR/ActivityThread(14514):     at android.app.ContextImpl.registerReceiver(ContextImpl.java:786)
01-03 02:57:11.345: ERROR/ActivityThread(14514):     at android.app.ContextImpl.registerReceiver(ContextImpl.java:780)
01-03 02:57:11.345: ERROR/ActivityThread(14514):     at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318)
01-03 02:57:11.345: ERROR/ActivityThread(14514):     at com.emergency.button.SMSSender.safeSendSMS(SMSSender.java:50)
01-03 02:57:11.345: ERROR/ActivityThread(14514):     at com.emergency.button.EmergencyActivity$EmergencyThread.sendSMS(EmergencyActivity.java:294)
01-03 02:57:11.345: ERROR/ActivityThread(14514):     at com.emergency.button.EmergencyActivity$EmergencyThread.sendMessages(EmergencyActivity.java:386)
01-03 02:57:11.345: ERROR/ActivityThread(14514):     at com.emergency.button.EmergencyActivity$EmergencyThread.run(EmergencyActivity.java:266)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...