2011-10-25 2 views
5

Quello che ho fattoSMS Broadcast Receiver non ottiene il textmessage


Ciao Ragazzi, sto creando in questo momento una trasmissione ricevitore SMS, ho appena edificò uno con questo tutorial: Broadcasttutorial. Dopo aver fatto il codice, ho aggiornato il mio manifest. Successivamente ho inviato sms dal mio altro telefono al mio telefono, ma non ha funzionato. Non ho avuto alcun risultato.

Domanda


Di cosa ho bisogno di cambiare, che io possa ricevere quelli SMS. Per favore dammi un anwser dettagliato che posso imparare, un buon tutorial sarebbe anche grande!

Codice


SMSBroadcastReceiver (è in .Servizi pacchetto)

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(); 
     }       
    } 
} 

Questo è il mio 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> 

risposta

6

Mettere <uses-permission android:name="android.permission.RECEIVE_SMS" /> al di fuori del <application> tag:

<?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> 

UPDATE

scoperto che @safari utilizza "Handcent SMS" applicazione sul suo telefono che intercetta SMS in arrivo (questo è possibile perché SMS_RECEIVED è una trasmissione ordinata e può essere annullata da ricevitori broadcast ad alta priorità, fare riferimento a to this thread per i dettagli).
Per evitare questo problema, è necessario installare il ricevitore broadcast con priorità più alta di "Handcent SMS". @safari ha utilizzato la massima priorità consentita per le applicazioni in Android: e ha funzionato per lui.
Per specificare la priorità del ricevitore trasmissione aggiungere l'attributo android:priority al corrispondente <intent-filter> voce:

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

l'ho fatto, ma non ha funzionato non riesco ancora a ricevere il messaggio con il messaggio, cosa non va :(? – safari

+0

@safari hai controllato l'output di LogCat? Eventuali errori li? – Idolon

+0

no nel mio log i non vedo nulla sul mio ricevitore ... – safari

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

invece di msgs.length, pdus contiene i messaggi di sms reali.

+0

ho provato, ma non ha funzionato mi dispiace. – safari

+0

Ecco come ho implementato il mio SMS Receiver, se vuoi posso postare la mia implementazione domani. – Carnal

0

gauglerb mi ha segnalato nella giusta direzione, qui con il suo commento per la risposta accettata e penso che dovrei condividere le mie scoperte.

Handcent è davvero un ragazzaccio e non consente a nessuna altra app di ricevere messaggi quando è installata.

Fortunatamente c'è una soluzione facile se non si desidera disinstallare Handcent:
nelle impostazioni dell'applicazione di Handcent c'è un'opzione per rendere Handcent l'applicazione di messaggistica predefinito. Se questo è disabilitato, i messaggi possono arrivare ad altri destinatari.