2009-12-22 16 views
12

Estoy tratando de escribir una aplicación simple que intente recibir mensajes SMS y manejarlos. He seguido varios tutoriales pero no llego a nada, cuando envío un SMS al emulador, el Intento nunca parece ser despedido.Receptor de SMS de Android no funciona

Aquí 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> 

me lo agradecería alguna orientación con lo que va mal. Me estoy metiendo en el desarrollo de Android, pero creo que tengo la cabeza cubierta (la mayoría). Al monitorear el logcat del emulador, los eventos de registro nunca aparecen, y los puntos de corte de depuración nunca son afectados, así que tengo la sensación de que están en algún lugar de mi filtro de intención.

Estoy ejecutando esto en Android 2.0.1.

+0

estoy haciendo algo similar aquí !!! http://stackoverflow.com/questions/14452808/sending-and-receiving-mms-in-android – toobsco42

+0

Para obtener más sugerencias sobre por qué una emisión de SMS recibida no se está activando, consulte esta publicación: http://stackoverflow.com/questions/4117701/android-sms-broadcast-receiver? rq = 1 – TheIT

Respuesta

10

Además de Samuh's answer (que tiene que hacer una comparación de objetos en la cadena de acción , o simplemente no hacer ninguna comparación), en su archivo de manifiesto ha escrito mal el SMS_RECEIVED.

+1

En caso de que esté utilizando Eclipse con ADT, puede evitar tales errores agregando permisos utilizando la pestaña Permiso que proporciona el Editor de Manifiesto en lugar de escribirlos usted mismo. – Samuh

+0

Si bien Samuh tiene razón, el hecho de haber escrito mal fue lo que impedía su funcionamiento. ¡Gracias! – Jess

10

Creo que su 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 ..

-1

Como la telefonía está en desuso (desde 1.0 creo), este método ya no funciona. 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)

+0

No solo el método que escribí aún funciona en 2.1, es idéntico al artículo vinculado en su publicación, y ese artículo fue escrito mucho antes de que le hiciera mi pregunta. No intentes confundir a la gente. – Jess

+0

Es android.telephony.gsm.SmsMessage que está en desuso: http://developer.android.com/reference/android/telefonía/gsm/SmsMessage.html android.telephony.SmsMessage funciona, de hecho, funciona bien hasta en 2.2. Interesante, el enlace de Christoph en realidad hace referencia a android.telephony.gsm.SmsManager, que también está en desuso. – mbafford

+0

Todavía no se ha modificado y funciona bien incluso ahora, la versión 6.0 (viene el 7.0) y casi el final de 2016 :) – Bruce

1

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

android.provider.Telephony.SMS_RECEIVED

1

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

esto está mal

intent.getAction() == SMS_RECEIVED) 

esto es justo

intent.getAction().equals (SMS_RECEIVED)) 
Cuestiones relacionadas