我的传入 SMS 处理接收器应从系统获得啥许可?

Posted

技术标签:

【中文标题】我的传入 SMS 处理接收器应从系统获得啥许可?【英文标题】:What permission should my incoming SMS-handling Receiver require from the system?我的传入 SMS 处理接收器应从系统获得什么许可? 【发布时间】:2012-09-04 10:41:39 【问题描述】:

我在我的 android 应用程序中静态注册了一个 BroadcastReceiver,它处理传入的 SMS 消息,如下所示:

        <receiver
            android:name=".receivers.SmsReceiver"
            android:exported="true" >
            <intent-filter android:priority="100" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

Lint 对此进行了警告标记,因为 Receiver 已导出,无需调用者的任何权限。如果我将导出的属性设置为 false,系统将无法在收到 SMS 消息时调用我的 Receiver。

那么在注册我的接收器以处理传入的 SMS 消息时,我应该从系统获得哪些权限?

编辑:

我并不是要让我的应用程序能够接收 SMS 消息的“uses-permission”标签。我要求为我的接收器提供正确的“android:permission”值,所以只有系统可以发送这样的广播消息,而另一个应用程序不能为我的应用程序欺骗这样的事件。

例如:

        <receiver
            android:name=".receivers.SmsReceiver"
            android:exported="true"
            android:permission="com.android.permission.SOME_PERMISSION_ONLY_THE_SYSTEM_HAS">
            <intent-filter android:priority="100" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

【问题讨论】:

上述问题与this有关吗? 不幸的是,没有。我正在定义正确的 标签,这样当系统收到 SMS 时,我会收到通知,并且 Lint 不会将此视为错误。然而,它告诉我,我的接收器需要一个“权限”标签,以便只有受信任的来源可以通知我的短信接收器(它应该只是系统)。但我找不到我应该使用哪个权限。 我在这里做类似的事情!!! ***.com/questions/14452808/… 【参考方案1】:

使用 android:priority="2147483647" 代替 android:priority="100" 因为假设您使用的任何应用程序的优先级高于您设置的优先级,那么您的广播永远不会通知您。还要在你的 mainfest uses-permission android:name="android.permission.RECEIVE_SMS" 中检查这个权限

【讨论】:

该值必须是整数,例如“100”。数字越大优先级越高。默认值为 0。该值必须大于 -1000 且小于 1000。如 DOC ref developer.android.com/guide/topics/manifest/… 中的建议

以上是关于我的传入 SMS 处理接收器应从系统获得啥许可?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复未受保护的 SMS BroadcastReceiver lint 警告

sms broadcast receiver 是啥意思

检测传入的 SMS 消息

由于短信许可,谷歌游戏商店拒绝了我的应用[关闭]

Semaphore信号量原理

如何在MIUI 8+中获取读取“服务SMS”的权限(以编程方式)