Why am I getting a NullPointerException when sending SMS to HTC Desire or what is SubmitPdu?

So, I get this stack trace:

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) 

And so I call sendTextMessage, I do not check the message length or the validity of the phone number:

 sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); 

This error only occurs on HTC Desire or HTC Wildfire with version 2.2 or 2.21 for Android, so I dug up the source code of the Android platform (in fact, it's not as easy to do as I expected) and found:
SmsMessage.java once at a time , although this may not be relevant, as I can see that some line numbers do not line up.
The emergency button project is open source, so you can check the code for reference. I must say that I canโ€™t check it myself, I donโ€™t have a phone model.

+8
android sms
source share
4 answers

You may encounter this problem with a message that is too long. I do not know why this will happen only for some phones.

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

+17
source share

Replace

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

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

Your message must be an ArrayList for this, use this method before calling sendSMS

 SmsManager sms = SmsManager.getDefault(); ArrayList<String> parts = sms.divideMessage(locationMessage); sendSMS(telNumber.getText().toString(),parts ); 
+7
source share

Not an answer, but too long to post a comment ...

I think you can have a lot of problems - I donโ€™t know what this can mean for you, but I had a desire to connect to DDMS and tried it. SMS and email were sent without problems (there are no errors in the stack trace), but this is what I got when using the BACK button from Activity, which shows progress (waiting for a location, sending email, sending SMS, etc.).

 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) 
0
source share

You must unregister the sms of the sent intent and sms to deliver the intent after use. One thing you can do is declare the intent of the receivers as a separate class that extends BraodCast. Then you can unregister the recipients.

0
source share

Source: https://habr.com/ru/post/650616/


All Articles