2011-10-25 17 views
5

Lo que he hechoSMS Receptor Broadcast no recibe el mensaje de texto


Hola chicos, estoy creando en este momento un receptor de radiodifusión SMS, sólo uno edificados con este tutorial: Broadcasttutorial. Después de que hice el código, actualicé mi Manifiesto. Después de eso, envié sms desde mi otro teléfono a mi teléfono, pero no funcionó. No obtuve ningún resultado.

Pregunta


¿Qué necesito para cambiar, que puedo recibir los SMS. Por favor, dame un informe detallado de que puedo aprenderlo, ¡un buen tutorial también sería genial!

Código


SMSBroadcastReceiver (está en .Servicios del paquete)

package de.retowaelchli.filterit.services; 

import de.retowaelchli.filterit.R; 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.util.Log; 
import android.widget.Toast; 


public class SmileySmsReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     //---get the SMS message passed in--- 
     Log.d("SmileySmsReceiver", "Yes it calls the onReceive"); 
     Bundle bundle = intent.getExtras();   
     SmsMessage[] msgs = null; 
     String str = "";    
     if (bundle != null) 
     { 
      //---retrieve the SMS message received--- 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length];    
      for (int i=0; i<msgs.length; i++){ 
       msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);     
       str += "SMS from " + msgs[i].getOriginatingAddress();      
       str += " :"; 
       str += msgs[i].getMessageBody().toString(); 
       str += "\n";   
      } 
      //---display the new SMS message--- 
      Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
     }       
    } 
} 

Esta es mi AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="de.retowaelchli.filterit" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="10" /> 

    <!-- User Permission --> 
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> 

    <application android:icon="@drawable/icon" 
       android:label="@string/app_name" 
       android:debuggable="true" 
       android:screenOrientation="sensor" 
       android:theme="@style/FilterIt.Theme"> 

     <activity android:name=".SplashScreenActivity" 
        android:label="@string/app_name"> 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    <!-- Receiver --> 
     <receiver android:name="de.retowaelchli.filterit.services.SmileySmsReceiver" android:enabled="true"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver>  



     <!-- Startseite --> 
     <activity android:name=".StartseiteActivity"></activity> 

     <!-- Von Startseite ausgehende Activitys --> 
     <activity android:name=".SmileyActivity"></activity> 
     <activity android:name=".ADeleteActivity"></activity> 
     <activity android:name=".StatsActivity"></activity> 
     <activity android:name=".HelpMenuActivity"></activity> 


     <!-- Von Stats ausgehende Activitys --> 
     <activity android:name=".stats.ADFilterStats"></activity> 
     <activity android:name=".stats.SFilterStats"></activity> 
     <activity android:name=".stats.CreatedADFilters"></activity> 
     <activity android:name=".stats.CreatedSFilters"></activity> 

     <!-- Von ADeleteActivity ausgehende Activitys --> 
     <activity android:name=".ADFilterConfigActivity"></activity> 

     <!-- Von SmileyActivity ausgehende Activitys --> 
     <activity android:name=".SFilterConfigActivity"></activity> 

    </application> 
</manifest> 

Respuesta

6

Deja <uses-permission android:name="android.permission.RECEIVE_SMS" /> fuera del <application> etiqueta:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="de.retowaelchli.filterit" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="10" /> 

    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 

    <application android:icon="@drawable/icon" 
       android:label="@string/app_name" 
       android:debuggable="true" 
       android:screenOrientation="sensor" 
       android:theme="@style/FilterIt.Theme"> 

    <!-- Receiver --> 
     <receiver android:name="de.retowaelchli.filterit.services.SmileySMSBroadcastReceiver"> 
      <intent-filter android:priority="999"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 
     … 
     … 
    </application> 
</manifest> 

ACTUALIZACIÓN

resultó que @safari utiliza la aplicación en su teléfono "Handcent SMS" que intercepta los SMS entrantes (esto es posible porque SMS_RECEIVED es una transmisión ordenada y puede ser cancelada por receptores de transmisión de alta prioridad, consulte to this thread para obtener más información).
Para eludir este problema, uno necesitaría instalar el receptor de difusión con una prioridad más alta que "Handcent SMS". @safari usó la prioridad más alta permitida para aplicaciones en Android: , y funcionó para él.
Para especificar la prioridad del receptor de radiodifusión añadir android:priority atributo correspondiente a <intent-filter> material:

<receiver android:name="YourSmsBroadcastReceiver"> 
    <intent-filter android:priority="999"> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 
+0

lo hice, pero no funcionó aún no recibo el mensaje de tostada con el mensaje, lo que está mal :(? – safari

+0

@safari ¿revisó la salida de LogCat? ¿Hay errores allí? – Idolon

+0

no en mi logcat i simplemente no veo nada sobre mi receptor ... – safari

0
for (int i=0; i<pdus.length; i++) 

en lugar de msgs.length, pdus contiene los mensajes de SMS reales.

+0

intenté pero no funcionó lo siento. – safari

+0

Así es como implementé mi receptor de SMS, si quieres puedo publicar mi implementación mañana. – Carnal

0

gauglerb me señaló en la dirección correcta aquí con su comentario a la respuesta aceptada y creo que debería compartir mis hallazgos.

Handcent ha sido realmente un chico malo y no está permitiendo que otras aplicaciones reciban mensajes cuando está instalado.

Afortunadamente hay una solución fácil si no quiere desinstalar Handcent:
En la configuración de la aplicación de Handcent hay una opción para hacer que Handcent sea la aplicación de mensajería predeterminada. Si esto está deshabilitado, los mensajes pueden pasar a otros receptores.

Cuestiones relacionadas