2011-07-03 20 views
9

Mam zaimplementowany odbiornik SMS, który przechwytuje przychodzące wiadomości SMS bez żadnych problemów. Jednak po zainstalowaniu aplikacji GO SMS Pro i ustawieniu opcji "Wyłącz powiadamianie o innych wiadomościach" moja aplikacja nie odbiera żadnej wiadomości, mimo że ustawiłem priorytet filtra intencyjnego bardzo wysoko. Czy istnieje sposób przezwyciężenia, aby moja aplikacja zawsze otrzymywała wiadomość SMS niezależnie od tego, co robi użytkownik w aplikacji Go SMS Pro, zwłaszcza, że ​​moja aplikacja nie wyświetla żadnego powiadomienia o wyskakującym interfejsie użytkownika o adresie ? Gdy tylko odinstaluję aplikację GO SMS Pro, moja aplikacja zacznie otrzymywać przychodzące wiadomości SMS o numerach i będzie działać poprawnie.SMS Broadcastreceiver nie jest wywoływany, gdy zainstalowano GO SMS Pro

Oto dziennik po odebraniu przychodzącego SMS-a i zainstalowaniu GO SMS Pro. Istnieje magia zrobiona przez GO SMS Pro, której nie rozumiem. Czy ktoś może wyjaśnić, co tu jest zrobione i jak mogę upewnić się, że moja aplikacja za każdym razem otrzyma uporządkowane powiadomienie o transmisji.

07-02 19:52:21.674: INFO/Zygote(25209): Zygote: pid 25209 has INTERNET permission, then set capability for CAP_NET_RAW 

07-02 19:52:21.820: INFO/ActivityThread(25209): Publishing provider go-sms: com.jb.gosms.provider.GoSmsProvider 

07-02 19:52:21.830: INFO/ActivityThread(25209): Publishing provider go-mms-sms: com.jb.gosms.provider.GoMmsSmsProvider 

07-02 19:52:21.834: INFO/ActivityThread(25209): Publishing provider com.jb.gosms.im;com.jb.gosms.chat: 
com.jb.gosms.im.database.ImContentProvider 

07-02 19:52:21.842: INFO/ActivityThread(25209): Publishing provider com.jb.gosms.schedule.Schedule: com.jb.gosms.schedule.ScheduleProvider 

07-02 19:52:21.846: INFO/ActivityThread(25209): Publishing provider go-mms: com.jb.gosms.provider.GoMmsProvider 

07-02 19:52:21.959: DEBUG/dalvikvm(25209): GC_FOR_MALLOC freed 2657 objects/173112 bytes in 30ms 

07-02 19:52:22.182: DEBUG/dalvikvm(25209): Trying to load lib /data/data/com.jb.gosms/lib/libHanzi2Pinyin.so 0x47d4cf70 

07-02 19:52:22.182: DEBUG/dalvikvm(25209): Added shared lib /data/data/com.jb.gosms/lib/libHanzi2Pinyin.so 0x47d4cf70 

07-02 19:52:22.182: DEBUG/dalvikvm(25209): No JNI_OnLoad found in /data/data/com.jb.gosms/lib/libHanzi2Pinyin.so 0x47d4cf70, skipping init 

07-02 19:52:22.186: INFO/Hanzi2Pinyin_Native(25209): InitLib in ver=3141000 

07-02 19:52:22.186: INFO/Hanzi2Pinyin_Native(25209): Init in 

07-02 19:52:22.186: INFO/Hanzi2Pinyin_Native(25209): file size=155203 

07-02 19:52:22.186: INFO/Hanzi2Pinyin_Native(25209): Init out 

07-02 19:52:22.186: INFO/Hanzi2Pinyin_Native(25209): Instance out Init = 21 

07-02 19:52:22.186: INFO/Hanzi2Pinyin_Native(25209): InitLib out 

07-02 19:52:22.467: DEBUG/dalvikvm(25209): GC_FOR_MALLOC freed 5960 objects/376104 bytes in 29ms 

07-02 19:52:22.815: DEBUG/IMS/Ims3GPP2SmsMessage(25209): IMSLogcreateFromPdu : calling parsePdu 

07-02 19:52:22.815: DEBUG/IMS/Ims3GPP2SmsMessage(25209): IMSLogpdu to parse : 000002100202070292A106A85A0008150003100730010610254E9D3A000306110702195220 

07-02 19:52:22.815: DEBUG/IMS/Ims3GPP2SmsMessage(25209): IMSLogparseAddress 

07-02 19:52:22.815: DEBUG/IMS/Ims3GPP2SmsMessage(25209): IMSLogaddress received :3233292992 

07-02 19:52:22.815: DEBUG/IMS/Ims3GPP2SmsMessage(25209): IMSLogbearer data received : 0003100730010610254E9D3A000306110702195220 

07-02 19:52:22.815: ERROR/bearer data(25209): bearer data obtained 1 

07-02 19:52:22.815: DEBUG/EMS(25209): messageType is 1 messageId is 115 hasUserDataHeader is false 

07-02 19:52:22.858: DEBUG/IMS/Ims3GPP2SmsMessage(25209): IMSLogcreateFromPdu : calling parsePdu 
+0

pracuję w tej sytuacji również: http: // stackov erflow.com/questions/6600266/suppress-block-broastreceiver-in-another-app –

Odpowiedz

12

„Dość wysoki” wartość priorytetu jest po prostu nie na tyle, jeśli chodzi o GO SMS Pro, bo już ustawionego na absolutnym maksimum 2147483647 (2^31-1). Jeśli więc dodasz tę wartość, wszystko będzie w porządku, o ile Twoja aplikacja zostanie zainstalowana przed Go SMS Pro, ponieważ w tym samym priorytecie system operacyjny Android przekaże transmisję do "starszej" aplikacji (wynika to z mojego doświadczenia, a nie z oficjalnej informacji) . Jeśli aplikacja Go SMS Pro jest zainstalowana przed aplikacją, należy ostrzec użytkowników o sytuacji. Mogą skonfigurować Go SMS Pro w inny sposób lub odinstalować go, a następnie zainstalować ponownie, aby Twoja aplikacja mogła również działać.

+1

Jest na to sposób, ponieważ zainstalowałem kilka aplikacji sms, aby to przetestować i mimo że Go SMS był pierwszym zainstalowanym, otrzymuję powiadomienia dla wszystkich 3 aplikacji sms które zainstalowałem (ale nie moje :() –

+2

Ustawiłem również priorytet mojej aplikacji na 2147483647, a gosms nadal przechwytuje sms nawet wtedy, gdy został zainstalowany PO mojej aplikacji. Jakieś pomysły??? – droideckar

+0

Jakieś inne pomysły? Moja aplikacja jest instalowana również po GoSMS, a GoSMS nadal otrzymuje transmisję przede mną. Mam również ustawiony poziom priorytetu (2^31-1). – evermeire

5

GO SMS Pro ustawił te linie w to oczywisty dla SmsReceiver:

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

wszystkie te intent-filtry dokonania jego priorytet wyższy niż odbiornika nawet jeśli odbiornik ma priorytet ustawiony 2147483647. można zobaczyć wykaz wszystkich odbiorników wszystkich aplikacji przez:

List<ResolveInfo> receivers = getPackageManager().queryBroadcastReceivers(new Intent("android.provider.Telephony.SMS_RECEIVED"), 0); 

pierwszy odbiornik na liście, otrzymuje sms zanim niż inni