2013-06-05 8 views
8

La mia app non riceve SMS quando è installato Go SMS. Ho impostato la massima priorità e ho provato a installare la mia app prima di installare l'app Go SMS. Tuttavia, Go SMS ottiene sempre SMS prima dei miei. (Il primo concetto installato sull'app non funziona sul mio telefono.)non ricevere sms anche quando si imposta la massima priorità e installato prima

Sono curioso di sapere cosa fanno gli sviluppatori di SMS. Come può la loro app intercettare sempre gli SMS prima dei miei?

La mia app funziona perfettamente senza Go SMS. Ad ogni modo, ecco il mio manifesto. Forse ho fatto qualcosa di sbagliato.

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.test.ansmsreceiver" 
android:versionCode="1" 
android:versionName="1.0" > 
<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.test.ansmsreceiver.MainActivity" 
     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 android:name="com.test.ansmsreceiver.SMSReceiver" > 
     <intent-filter android:priority="2147483647"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      <action android:name="android.provider.Telephony.NEW_OUTGOING_SMS" /> 
     </intent-filter> 
    </receiver> 
</application> 

ho trovato altri questions legati al mio problema, ma ancora non riesce a trovare il modo per risolvere il problema.

Modifica: il mio progetto di test è su Github: https://github.com/entryleveldev/ansmsreceiver.

Edit2: ancora non sono sicuro di come Android decida quale ricevitore ottenere l'intento prima. Da quello che ho provato, Go SMS ottiene sempre l'intento. UID e l'ordine di installazione non contano. Ma quando ho testato la mia app e Handcent SMS, l'ordine di installazione è importante. Forse Go SMS usa un qualche tipo di hacky per farlo.

Ecco il SmsReceiver nel manifest Go SMS.

<receiver android:name=".smspopup.SmsReceiver" android:permission="android.permission.BROADCAST_SMS"> 
     <intent-filter android:priority="2147483647"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> 
      <category android:name="android.intent.category.DEFAULT"></category> 
     </intent-filter> 
     <intent-filter android:priority="2147483647"> 
      <action android:name="android.provider.Telephony.GSM_SMS_RECEIVED"></action> 
      <category android:name="android.intent.category.DEFAULT"></category> 
     </intent-filter> 
     <intent-filter > 
      <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED"></action> 
      <data android:mimeType="application/vnd.wap.mms-message"></data> 
     </intent-filter> 
     <intent-filter > 
      <action android:name="com.android.mms.transaction.MESSAGE_SENT"></action> 
     </intent-filter> 
    </receiver> 

L'impostazione predefinita è disabilitare la notifica di altri messaggi (abortBroadcast). Questo è davvero cattivo per me.

+0

Hai provato a copiare i loro filtri di intent e vedere se ha fatto la differenza? – Darwind

+0

L'ho provato. – pt2121

+0

Hmm ok - In realtà ho lo stesso problema in una mia app, ma ci sto semplicemente convivendo ;-) Hai anche aggiunto il tag di autorizzazione sul ricevitore come hanno fatto? Se non è possibile ignorare la loro priorità, devono usare un qualche tipo di trucco per farlo funzionare. – Darwind

risposta

0

Come la domanda che si sta collegando per spiegare, una volta che il ricevitore dell'app GO SMS viene chiamato, possono chiamare abortBroadcast(). Supponendo che stanno utilizzando la massima priorità possibile (= 2147483647), presumo che il seguente frammento dal docs si applica:

L'ordine ricevitori entrano in può essere controllato con l'androide: priorità attributo della corrispondenza intent-filtro; i ricevitori con la stessa priorità verranno eseguiti in un ordine arbitrario.

Tuttavia, dal momento che intercettano sempre SMS prima della tua app, suppongo che la magia sia da qualche altra parte. Tra i loro permessi, hanno la seguente:

  • "android.permission.PERSISTENT_ACTIVITY"
  • "android.permission.WRITE_SMS"
  • "android.permission.READ_SMS"

Do ti dispiace provare una combinazione di questi, per vedere se influisce sull'ordinamento della risoluzione dell'intento?

+0

perspicace, voglio vedere come va. –

+0

Appena testato quello che hai suggerito. Non funziona. Grazie comunque. – pt2121

+0

@EntryLevelDev su quale livello API stai verificando? – verybadalloc

Problemi correlati