¿Por qué obtengo NullPointerException al enviar un SMS en un HTC Desire, o lo que es SubmitPdu?

Así que obtener este seguimiento de pila:

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) 

Y esto es cómo yo llamo sendTextMessage, no comprobar la longitud del mensaje o la validez del número de teléfono:

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

Este error parece ocurrir solamente en HTC Desire o HTC Wildfire con la versión androide 2.2 o 2.21 así que desenterré la fuente de la plataforma del androide (que no es realmente tan fácil hacer como esperaba) y encontrado:
SmsMessage.java una vez que esto puede no ser relevante ya que veo que algunos de los números de línea no se alinean.
El proyecto de botón de emergencia es de código abierto para que pueda comprobar el código para referencia. Probablemente debería notar que no puedo probar esto yo mismo, no tengo ningún modelo de teléfono.

Es posible que esté afectando este problema con un mensaje que es demasiado largo. No sé por qué sólo estaría sucediendo para ciertos teléfonos, sin embargo.

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

Reemplazar

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

por

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

Su mensaje debe ser un ArrayList para eso, use este método antes de llamar a sendSMS

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

No es una respuesta, pero demasiado tiempo para publicar en un comentario …

Creo que usted puede tener múltiples problemas – ni idea de lo que esto podría significar para usted, pero yo tenía mi deseo enganchado a DDMS y le dio una oportunidad. El SMS y el correo electrónico fueron enviados sin problema (no hay errores en el rastro de la pila) pero esto es lo que obtuve al usar el botón ATRAS de la Actividad que muestra el progreso (esperando ubicación, correo electrónico enviado, SMS enviado 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) 

Usted tiene que desregistrar sms enviados intención reciever y sms entregado intención después del uso, Una cosa que puede hacer declarar la intención Receptores como clase separada que se extiende BraodCast, A continuación, puede anular el registro de los receptores.

  • Los datos de Android enviados entre dos emuladores se truncan en tránsito
  • Sms de prueba de Android del emulador
  • Mensaje de autocompletado en Phonegap / Cordova iOS y Android
  • Envío y recepción de texto mediante el emulador de Android
  • Recuperación de mensajes SMS desde Inbox
  • Android Market dice que mi aplicación "no está en el grupo de destino" o que "no se puede instalar en este dispositivo"
  • Bloquear SMS salientes por contentObserver
  • Android enviando muchos mensajes SMS
  • ¿Cómo comunicar la aplicación con el servidor sin conexión a Internet?
  • Transmitir datos de la clase BroadcastReceiver a una actividad de Android
  • Envío de un SMS en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.