我已经实施了一个短信接收器,它可以截获传入的短信而不会出现任何问题。 但是,当我安装GO短信加强版并设置“禁用其他邮件通知”,然后我的应用程序 即使我已在intent过滤器上设置优先级,也不会收到任何广播消息 很高。有没有办法克服,以便我的应用程序总是收到短信广播,无论如何 用户在Go SMS Pro的应用程序上做了什么,特别是因为我的应用程序没有显示任何UI弹出窗口 通知?我卸载GO短信加强版后,我的应用程序开始收到短信广播 并且工作正常。
这是收到传入短信并安装GO SMS Pro时的日志。有一些 由GO SMS Pro完成的魔术,我不明白。有人可以解释这里做了什么以及如何做 我可以确保我的应用每次都收到订购的广播通知。
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 :(得分:12)
优秀的“非常高”值仅限于Go SMS Pro,因为他们将其绝对最大值设置为2147483647(2 ^ 31-1)。因此,如果你把这个值放在你的应用程序安装之前你就可以了,因为在相同的优先级Android OS会将广播传递给“旧”应用程序(这是根据我的经验,而不是官方信息) 。如果在应用程序之前安装了Go SMS Pro,则应警告用户有关此情况。他们可以用不同的方式配置Go SMS Pro或卸载它,然后重新安装它,这样你的应用程序也可以工作。
答案 1 :(得分:5)
go sms pro已将这些行设置在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>
所有这些意图过滤器的优先级都高于接收者,即使您的接收者的优先级设置为2147483647.您可以通过以下方式查看所有应用程序的所有接收者列表:
List<ResolveInfo> receivers = getPackageManager().queryBroadcastReceivers(new Intent("android.provider.Telephony.SMS_RECEIVED"), 0);
列表中的第一个接收者,比其他人接收短信