Android: SMSManager – Intento de obtener longitud de matriz nula
Tengo un error del SMSManager cuando intento enviar un mensaje con el método sendTextMesasge
. Me devuelve una java.lang.NullPointerException: Attempt to get length of null array
.
Hay mi código:
- Encontrar datamessage en el teléfono android antes de instalar la aplicación
- Enviar SMS usando SmsManager en android falla en algún dispositivo
- SMS de confirmación no deseados enviados por el proveedor en Austria
- Recibir SMS Intent: Obtener identificación de mensaje o de hilo
- Android - cómo hacer que mi app sms aplicación por defecto programatically
// Constructs the message TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String myPhoneNumber = mTelephonyMgr.getLine1Number(); String destNumber = taskManager.getHelpCenterNumber(); String message = getResources().getString(R.string.call_me_message) + " " + myPhoneNumber+"."; // Sends the message SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(destNumber, null, message, null, null);
El LogCat recibe este mensaje:
08-03 09:59:10.548: E/AndroidRuntime(19825): FATAL EXCEPTION: main 08-03 09:59:10.548: E/AndroidRuntime(19825): Process: com.solarsquareretailer.view, PID: 19825 08-03 09:59:10.548: E/AndroidRuntime(19825): java.lang.NullPointerException: Attempt to get length of null array 08-03 09:59:10.548: E/AndroidRuntime(19825): at android.os.Parcel.readException(Parcel.java:1546) 08-03 09:59:10.548: E/AndroidRuntime(19825): at android.os.Parcel.readException(Parcel.java:1493) 08-03 09:59:10.548: E/AndroidRuntime(19825): at com.android.internal.telephony.ISms$Stub$Proxy.sendText(ISms.java:1428) 08-03 09:59:10.548: E/AndroidRuntime(19825): at android.telephony.SmsManager.sendTextMessage(SmsManager.java:305) 08-03 09:59:10.548: E/AndroidRuntime(19825): at com.solarsquareretailer.view.MainActivity.onOptionsItemSelected(MainActivity.java:245)
- SMS Manager envía mensaje mutlipart cuando hay menos de 160 caracteres
- Enviar SMS sin guardarlo en el elemento enviado en kitkat
- SMS no recibidos ... sólo en ciertos casos ... Carrier / Country?
- Informe de entrega de Android SmsManger
- SMSManager no funciona en Samsung Galaxy S3 LTE
- ¿Cómo usar dos emuladores al mismo tiempo en el mismo proyecto en Android Studio?
- Eliminar SMS de android en 4.4.4 (Afectado filas = 0 (cero), después de suprimido)
- Cómo abortar BroadcastReceiver en android
Encontré mi destNumber era nulo y no correcto (No es un número de teléfono). Es por eso que tengo una java.lang.NullPointerException.
He encontrado esto varias veces en mi aplicación en la naturaleza (pero nunca en mis pruebas), y trató de encontrar una solución durante meses. Hasta ahora no pude encontrar un caso de prueba que lo reproduzca.
Utilización del método Sms.sendMultipartTextMessage :
SmsManager sms = SmsManager.getDefault(); ArrayList<String> parts = sms.divideMessage(msg); sms.sendMultipartTextMessage(number, null, parts, null, null);
No ayuda tampoco – ya que internamente termina llamando a sendTextMessage si el mensaje tiene sólo una parte – pero de todos modos, podría ser una buena idea si cambia a ella en caso de que tenga mensajes más largos.
Terminé envolviendo el código en un try-catch e informando a un servidor cada vez que sucede. Y por lo que he visto, los mensajes aparentemente "normales" parecen activarlo.
Hay un caso similar aquí , pero en ese caso el mensaje tiene una PendingIntent para enviar. Tal vez quieras intentarlo.
Primero, necesitas permiso en AndroidManifest.xml para leer Estado del teléfono
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
A continuación, intente obtener el Número de dispositivo móvil en Bloque de captura de intento.
Puede suceder que getLine1Number () devuelva valor nulo. Por lo que necesita manejar la excepción
try { myPhoneNumber = mTelephonyMgr.getLine1Number(); } catch(NullPointerException ex) { }
- Publicación de la biblioteca android a jcenter error – Añade un archivo POM a la última versión de tu paquete
- Crashlytics ndk cambia la ruta del cargador de clases