Pregunta

Estoy intentando escribir una sencilla aplicación que intenta recibir mensajes SMS y manejarlos. He seguido varios tutoriales pero estoy llegando a ninguna parte, cuando envío de un SMS al emulador, la intención nunca parece ser despedido.

Este es mi intención:

package com.neocodenetworks.smsfwd;

import android.content.*;
import android.os.Bundle;
import android.telephony.*;
import android.util.Log;

public class SmsReciever extends BroadcastReceiver {
    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
    private static final String TAG = "smsfwd";

    @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());
                    NetComm.SendMessage("me", messages[0].getOriginatingAddress(), messages[0].getMessageBody());
                }
            }
        }
    }
}

y aquí está mi AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.neocodenetworks.smsfwd"
        android:versionCode="1"
        android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
        <receiver android:name=".SmsReciever">
            <intent-filter>
                <action android:name="android.provider.telephony.SMS_RECIEVED"></action>
            </intent-filter>
        </receiver>
    </application>
    <uses-sdk android:minSdkVersion="6" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest>

Te lo agradecería alguna orientación con lo que va mal. Me acaba de entrar en el desarrollo de Android, pero creo que he envuelto alrededor de mi cabeza (la mayoría) de la misma. Durante la supervisión de Logcat del emulador, los eventos de registro no aparecen, y los puntos de interrupción de depuración no se ven afectados, por lo que tengo la sensación de que en algún lugar de mi filtro intención.

Me estoy quedando esta en Android 2.0.1.

¿Fue útil?

Solución

Además de respuesta de Samuh (lo que necesita hacer una comparación de objetos en la cadena de acción, o simplemente no hay comparación ), en el archivo de manifiesto que no haya escrito correctamente SMS_RECEIVED.

Otros consejos

Creo que el manifiesto se ve bien; el problema es con la línea:

if (intent.getAction() == SMS_RECEIVED) {

Creo que debe ser: intent.getAction().equals(ACTION)

Espero que ayude ..

El nombre de la acción parece requerir una "T" mayúscula en "Telefonía.

android.provider.Telephony.SMS_RECEIVED

Para las variables String no se debe comparar con el símbolo ==, debe comparar con el método equals()

esto está mal

intent.getAction() == SMS_RECEIVED) 

esto es justo

intent.getAction().equals (SMS_RECEIVED)) 

Desde la telefonía está en desuso (desde 1.0 creo), este método no funciona más. Echa un vistazo a este tutorial si necesita una solución adecuada: http://mobiforge.com/developing/story/sms-messaging-android (Sólo quería señalar esto, ya que me topé con una gran cantidad de tutoriales que ya no funcionan)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top