¿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.

  • Android y Google Voice: escuchando mensajes SMS entrantes
  • ¿Es possilbe leer y / o modificar la cabecera de SMS en Android?
  • Enviar SMS hasta que tenga éxito
  • Cómo enviar SMS con Delphi XE5 en Android
  • Eliminar SMS en Android 1.5
  • Intención del informe de entrega de mensajes de Android SMS
  • BroadcastReceiver SMS_Received no funciona en nuevos dispositivos
  • Cómo eliminar un SMS de la bandeja de entrada en Android mediante programación?
  • La intención de la aplicación sms no funciona en android 3.0 y superior
  • Extraer (analizar) la cantidad y descripción de BIZ (Transaction) sms
  • Uso de SMS para verificar el número de teléfono de un dispositivo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.