2011-11-06 10 views
8

Ho un problema davvero frustrante."android.provider.Telephony.SMS_RECEIVED" non funziona sul mio dispositivo (HTC Wildfire) - come eseguire il debug?

Ho creato il ricevitore SMS come la maggior parte dei tutorial online e del libro.

AndroidManifest.xml:

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

<application android:name="roboguice.application.RoboApplication" 
      android:icon="@drawable/icon" 
      android:label="@string/app_name" 
      android:debuggable="true" >  

    <!-- ... other stuffs here ... --> 

    <receiver android:name=".receivers.SmsReceiver"> 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 
</application> 

SmsReceiver.java:

public class SmsReceiver extends BroadcastReceiver { 

    public static final String TAG = "SmsReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "SMS received!"); 
     Toast.makeText(context, "SMS received.", Toast.LENGTH_LONG).show(); 
    } 
} 

Mentre funziona correttamente su Emulator (Android 2.2) non funziona sul mio HTC Wildfire (Android 2.2 .1, non rootato).

Il problema principale è che io sono nuovo in deveopment Android e ho completamente idea di come eseguire il debug di esso.

Posso scoprire qualcosa di utile con i registri Logcat sendt dal mio dispositivo HTC mentre riceve messaggi SMS? Perché il mio dispositivo è diverso?

+0

La trasmissione di SMS è ordinata, quindi il passaggio 1 è quello di aumentare il livello di priorità dei ricevitori. Puoi farlo impostando l'attributo android: priority sul tuo intent-filter su un valore spericolato e testando nuovamente. Prova qualcosa come 2147483647. – Jens

+0

Non cambia nulla :(. Nessun log in LogCat, nessun Toast mostrato, solo niente sul dispositivo (su Emulator funziona come previsto). Mi chiedo perché ottengo tale log in LogCat quando telefono riceve il messaggio sms: "11-06 23: 43: 20.540: DEBUG/SMSDispatcher (171): dispatchWapPushToCIQ >>>". Potrebbe essere questa la ragione o qualsiasi traccia? – ncreated

+0

Hm, prova a scaricare un filtro SMS esistente (da Market) o qualcosa di simile al tuo Wildfire e testalo per primo - potrebbe essere qualcosa di stordito nel telefono HTC (è successo prima ..) – Jens

risposta

9

Motivo & Soluzione:

ho rimediare. "Android.provider.Telephony.SMS_RECEIVED" non funzionava perché avevo applicazione "GO SMS Pro" installato sul mio dispositivo e c'era "Disabilita altro messaggio di notifica" opzione selezionata ("Disabilita notifica SMS altra app connesse nella barra di notifica, evitare le notifiche duplicate. "). Deselezionando ha risolto il mio problema.

Come fare in modo che il mio ricevitore trasmissione riceverà questo intento, anche se alcuni altri blocchi app è? A causa di "android: priority" (Intercept SMS messages in Android and prevent them appearing in Messaging App), come posso sapere quale "priorità" è impostata per l'app "GO SMS Pro"?

+0

thx, questo funziona, nelle "impostazioni avanzate" -> "Altre impostazioni" -> (Deseleziona) "Disattiva notifica di altri messaggi". –

0

Sono abbastanza sicuro che questo codice è giusto. Potresti non vedere il messaggio Toast, ma i log sarebbero arrivati. Controlla il logcat e dovresti vedere il log che hai inserito.

Si dovrebbe usare Notifications all'interno di BroadcastReceivers e non Toast s.

7

Per la vostra Motivo & Soluzione:

Intent intent = new Intent("android.provider.Telephony.SMS_RECEIVED"); 
List<ResolveInfo> infos = getPackageManager().queryBroadcastReceivers(intent, 0); 
for (ResolveInfo info : infos) { 
    System.out.println("Receiver name:" + info.activityInfo.name + "; priority=" + info.priority); 
} 

E basta guardare attraverso il vostro uscita per il Pro stronzate GO SMS. Probabilmente è incredibilmente alto.

+2

Grazie mille! :)! Ora vedo che i ragazzi di "GO SMS Pro" hanno creato due ricevitori con priorità uguale al valore intero massimo (2147483647). La loro app probabilmente chiama abortBroadcast() su SMS_RECEIVED. Quindi c'è un modo in cui posso combattere con la loro app? La documentazione non dice nulla di ciò che accade quando le priorità sono uguali, ma quando scopro che l'app "Go SMS Pro" viene chiamata per prima, consuma il mio intento SMS_RECEIVED e la mia app non viene chiamata come risultato :(. – ncreated

+0

È "installato prime vittorie" se ricordo bene, la cosa migliore è avvertire il cliente che GO SMS Pro è un problema noto (finestra di dialogo, notifica o altro) – Jens

+1

Grazie ancora. Probabilmente la soluzione migliore sarebbe un'estensione di ciò che hai scritto: per usare il codice sopra e controllare se ci sono altri destinatari registrati per l'intento SMS_RECEIVED con priorità massima, quindi per avvisare l'utente che le app elencate potrebbero causare un problema. – ncreated

2

GO SMS PRO ha la priorità è 2^31-1 = 2147483647. Quindi la vostra applicazione non è in grado ricevitore alcun messaggio perché il servizio GO SMS interrotta altre trasmissioni.

Problemi correlati