TransWikia.com

Envío SMS no se envía pero informa éxito en la operación

Stack Overflow en español Asked by briast on September 8, 2020

Uso el código siguiente para enviar un SMS. El problema es que la aplicación indica que el mensaje se ha enviado correctamente, pero realmente ni se envía ni aparece en la lista de SMS enviados, y no encuentro donde puede estar el problema.

public void enviar(String numTelefono, String mensaje) {

        if (mensaje.length() > 160) {
            Toast.makeText(context, R.string.sms_limite_max, Toast.LENGTH_LONG).show();
            return;
        }

        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED) {
            try {
                SmsManager smsMgrVar = SmsManager.getDefault();
                smsMgrVar.sendTextMessage(numTelefono, null, mensaje, null, null);
                Toast.makeText(context, R.string.sms_ok,
                        Toast.LENGTH_LONG).show();
            } catch (Exception error) {
                Toast.makeText(context, error.getMessage().toString(),
                        Toast.LENGTH_LONG).show();
                error.printStackTrace();
            }
        } else {
            Toast.makeText(context, R.string.sms_sin_permiso,
                        Toast.LENGTH_LONG).show();
        }

    }

2 Answers

El código que muestras es correcto, pero considera que para lograr enviar mensajes SMS debes cumplir estos puntos:

• El dispositivo desde donde deseas enviar el mensaje debe tener soporte teléfonico.

• Debes definir el permiso SEND_SMS tanto dentro del AndroidManifest.xml como realizar la petición manualmente, puedes ver más información:

Permisos para enviar Mensajes de Texto (enviar SMS)

• Debes usar la clase SmsManager que soporta GSM y CDMA.

• Definir correcamente el número y mensaje.

Ejemplo:

String phone = "1234567890";
String text = "Hola desde Stackoverflow.com";
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phone, null, text , null, null);

Correct answer by Elenasys on September 8, 2020

Probá agregando un PendingIntent

PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,new Intent(SENT), 0);
smsMgrVar.sendTextMessage(numTelefono, null, mensaje, sentPI, null);

Lo que estas haciendo es imprimir el Toast luego del sendTextMessage() por lo que si el llamado no tira un IllegalArgumentException siempre vas a mostrar el mensaje de éxito.

Al usar PendingIntent podés saber si el mensaje se envió correctamente o falló. Por lo que luego de ejecutar el sendTextMessage() podés saber el código resultante y sólo mostrar tu Toast si es igual Activity.RESULT_OK.

La especificación de los distintos mensajes de error las podés encontrar aqui

Answered by andres on September 8, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP