2013-08-06 15 views
0

我已經實現了一個SMS接收器,它可以毫無問題地攔截接收到的SMS消息。但是,當我安裝GO SMS Pro並設置「禁用其他消息通知」時,即使我已將意向篩選器的優先級設置得非常高,我的應用程序也不會收到任何廣播消息。有沒有一種方法可以解決這個問題,以至於我的應用程序總是收到短信廣播,而不管用戶在Go SMS Pro的應用程序上做什麼,特別是因爲我的應用程序沒有顯示任何UI彈出通知?只要我卸載GO短信臨,我的應用程序開始收到短信廣播,並正常工作。SMS廣播接收器在GO SM安裝時不會被呼叫

以下是收到傳入短信並安裝GO SMS Pro的日誌。 GO SMS Pro有一些魔法,我不明白。有人可以解釋在這裏做了什麼,我怎樣才能確保我的應用程序每次都得到有序的廣播通知。

+0

這是因爲GO短信的優先級上都是Integer.MAX_VALUE。 (**非常**高) – njzk2

回答

1

附加以下廣播接收機申報您的清單代碼

<receiver 
     android:name="com.application.reciever.SMSReceiver" 
     class="com.application.reciever.SMSReceiver" android:exported="true"> 
    <intent-filter android:priority="999" > 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
</receiver> 

「的值必須爲整數,如‘100’,編號越大具有更高的優先級。」

希望它能幫助你。

+0

如果GO也將優先級設置爲999,不確定這將有助於 – MikeIsrael

+2

如果兩個應用具有相同的優先級,則操作系統會調用先安裝的應用。 – Ayush

+0

你試過了嗎? @MikeIsrael – Andrain

0

GO SMS已將它們的絕對最大值設置爲2147483647 (2^31-1)。因此,如果您將相同優先級設置爲相同優先級,則在此情況下,Android操作系統會將廣播傳遞給較早的應用程序,即(首次安裝的應用程序)將獲得通知。如果Go SMS Pro在您的應用程序之前安裝,則應警告用戶有關情況。他們可以配置Go SMS Pro或將其卸載,然後重新安裝,以便您的應用也可以工作。

<receiver android:name=".SMSReceiver" > 
    <intent-filter android:priority="2147483647"> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 

然後在SMSReceiver 的onReceive()你需要添加abortBroadcast()中止任何進一步的廣播

public void onReceive(Context context, Intent intent) { 
    abortBroadcast(); 
} 
+0

這是一個有趣的理論,但我的應用程序安裝在GoSMS之前,我擁有最高優先級2147483647(2^31-1),GoSMS在我的應用程序之前接收廣播接收器並中止它。 – evermeire