¿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:
- ¿Abre la aplicación de Android enviando un mensaje de texto?
- SMS enviados / entregados: ¿cómo identificas a qué SMS pertenece la emisión?
- Cómo obtener lista de sms como convesations en cada dispositivo Android 2.2+
- Envío de sms a varias personas en android
- Iniciar una intención de mensaje SMS ya no funciona para el nuevo sistema operativo RAZR ICS de Droid
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.
- Android: Marcar mensaje de texto (SMS) no leído
- Enviar un mensaje SMS (UTF-16) con un carácter desconocido reemplazado por un "carácter de reemplazo" en Android
- Lanzar la aplicación android cuando se pulsa un enlace en SMS
- Selecciona los primeros SMS en la bandeja de entrada de la base de datos de Android
- Anular la aplicación predeterminada de mensajería de android
- ACTION_SEND utilizado para enviar sms
- Recibir SMS en la aplicación para Android
- Obtener id de id de mensaje o _id de onReceive android
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.
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.
- Barra de progreso redondeada en ambos lados en android
- Android – acceso a los activos de la aplicación de prueba