android aplicaciones - Android - Receptor de transmisión de SMS




5 Answers

android.provider.Telephony.SMS_RECEIVED tiene una T mayúscula, y la tuya en el manifiesto no.

Tenga en cuenta que esta acción Intent no está documentada.

en pdf

He intentado hacer funcionar this programa, pero hasta ahora no he tenido suerte. No puedo encontrar donde estoy haciendo mal. No estoy seguro de si hay algún problema con el código o la depuración.

Estoy tratando de recibir una notificación si llega un nuevo SMS.

Aquí está mi programa:

package Technicaljar.SMSBroadcastReceiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;

public class SMSBroadcastReceiver extends BroadcastReceiver {

        private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
        private static final String TAG = "SMSBroadcastReceiver";

        @Override
        public void onReceive(Context context, Intent intent) {
             Log.i(TAG, "Intent recieved: " + intent.getAction());

                if (intent.getAction() == SMS_RECEIVED) {
                    Bundle bundle = intent.getExtras();
                    if (bundle != null) {
                        Object[] pdus = (Object[])bundle.get("pdus");
                        final SmsMessage[] messages = new SmsMessage[pdus.length];
                        for (int i = 0; i < pdus.length; i++) {
                            messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                        }
                        if (messages.length > -1) {
                            Log.i(TAG, "Message recieved: " + messages[0].getMessageBody());
                        }
                    }
                }
           }
    }

Y el archivo manifiesto:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="Technicaljar.SMSBroadcastReceiver"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true" >
        <receiver android:name=".SMSBroadcastReceiver">
            <intent-filter>
                <action android:name="android.provider.telephony.SMS_RECEIVED"></action>
            </intent-filter>
        </receiver>

    </application>
    <uses-sdk android:minSdkVersion="7" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest> 

Estoy enviando SMS a través de Telnet, y no puedo ver ningún mensaje recibido de Intent en el logcat. Aquí está mi logcat desde el momento de la instalación.

D/AndroidRuntime(  478): 
D/AndroidRuntime(  478): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
D/AndroidRuntime(  478): CheckJNI is ON
D/AndroidRuntime(  478): --- registering native functions ---
D/AndroidRuntime(  478): Shutting down VM
D/dalvikvm(  478): Debugger has detached; object registry had 1 entries
I/AndroidRuntime(  478): NOTE: attach of thread 'Binder Thread #3' failed
D/Mms:app (  220): getSmsNewMessageNotificationInfo: count=14, first addr=12345, thread_id=4
D/dalvikvm(  151): GC_EXPLICIT freed 391 objects / 22552 bytes in 65ms
D/dalvikvm(  220): GC_EXPLICIT freed 926 objects / 44840 bytes in 73ms

Así que el emulador parece haber recibido el SMS, pero parece que las intenciones no están encendidas. ¿Qué estoy haciendo mal aquí? Después de la instalación, ¿tengo que 'iniciar' de algún modo este receptor? Porque cuando instalo, obtengo

 [2010-11-07 21:24:41 - SMSBroadcastReceiver] No Launcher activity found!
[2010-11-07 21:24:41 - SMSBroadcastReceiver] The launch will only sync the application package on the device!

Entonces me pregunto si algo está mal aquí.




También tenga en cuenta que la aplicación Hangouts bloqueará actualmente que BroadcastReceiver no reciba mensajes SMS. Tuve que deshabilitar la funcionalidad de SMS en la aplicación de Hangouts (Configuración-> SMS-> Activar SMS), antes de que mi SMS BroadcastReceived comenzara a ser despedido.

Editar: parece que algunas aplicaciones abortaránBroadcast () con la intención de evitar que otras aplicaciones reciban el intento. La solución es aumentar el atributo android:priority en la etiqueta de intent-filter :

    <receiver android:name="com.company.application.SMSBroadcastReceiver" >
        <intent-filter android:priority="500">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

Ver más detalles aquí: Habilitar el soporte de SMS en Hangouts 2.0 rompe el BroadcastReceiver de SMS_RECEIVED en mi aplicación




intent.getAction().equals(SMS_RECEIVED)

Lo he intentado con éxito.




Su receptor de difusión debe especificar android:exported="true" para recibir transmisiones creadas fuera de su propia aplicación. Mi receptor de difusión se define en el manifiesto de la siguiente manera:

<receiver
    android:name=".IncomingSmsBroadcastReceiver"
    android:enabled="true"
    android:exported="true" >
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

Como se indica a continuación, exported = "true" es el valor predeterminado, por lo que puede omitir esta línea. Lo dejé para que los comentarios de la discusión tengan sentido.




android.provider.telephony.SMS_RECEIVED no es correcto porque Telephony es una clase y debe ser mayúscula como en android.provider.Telephony.SMS_RECEIVED




Related

android sms android-intent broadcastreceiver