AnswerBun.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!

Related Questions

Input de imagen no me aparece en el formulario

0  Asked on December 25, 2021

 

Postman – Caracteres escape respuesta XML

1  Asked on December 25, 2021 by susacapuntas

         

Gulp-pug no funciona

3  Asked on December 23, 2021 by pablo-dominguez

     

actualizar una datatable en tiempo real laravel

1  Asked on December 23, 2021 by ramon-albares

   

¿Como puedo agregar ActionListener en este método?

2  Asked on December 23, 2021 by webrollandeveloper

   

¿Como recorrer un dataframe como una lista de listas?

2  Asked on December 23, 2021 by raimundovp

   

Sobre input en python

2  Asked on December 23, 2021

     

Convertir una variable double a float

1  Asked on December 22, 2021 by odoardo

   

Agrupar por fecha + Hora dinámico

2  Asked on December 22, 2021

   

Extraer enteros de una cadena JAVA

3  Asked on December 22, 2021 by johann-duran

         

¿Cómo puedo almacenar los datos de una API por líneas en Python?

0  Asked on December 22, 2021 by quique-fernandez

   

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir