权限拒绝:广播 Intent act=android.provider.Telephony.SMS_RECEIVED

Posted

技术标签:

【中文标题】权限拒绝:广播 Intent act=android.provider.Telephony.SMS_RECEIVED【英文标题】:Permission Denial: broadcasting Intent act=android.provider.Telephony.SMS_RECEIVED 【发布时间】:2017-05-13 12:54:55 【问题描述】:

我的应用会读取收到的短信。我已经在 Manifest 中实现了接收器,添加了权限和接收器,但是当收到 SMS 时,我在 logcat 中收到以下消息。

12-29 13:25:00.081 2030-2044/? W/BroadcastQueue:权限拒绝: 广播意图 act=android.provider.Telephony.SMS_RECEIVED 来自 com.android.phone (pid=5234, uid=1001) 由于接收方,未从 uid 10665 导出 com.tatvic.vatsal.test_uninstall_tracking/com.tatvic.lib.uit.SmsReceiver

清单:

<uses-permission android:name="android.permission.RECEIVE_SMS" />

<application
    ....>
    <receiver android:name=".SmsReceiver"
        android:exported="false">
        <intent-filter android:priority="1000">
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>
</application>

短信接收器:

public class SmsReceiver extends BroadcastReceiver 

    @Override
    public void onReceive(Context context, Intent intent) 
        if (intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION) && intent.getExtras() != null) 
            Log.d("MessageReceived", "MessageReceived");
        
    

我在 *** 上阅读过类似的帖子,但没有任何帮助。我已经在 Marshmallow OS 上对此进行了测试,并允许 SMS 权限。

如何在我的应用中接收短信?

编辑:

Menifest 文件的receiver 标记中设置exported = true 后,当应用打开或处于后台时,我能够在我的应用中接收短信。但是当应用程序关闭时,我在 logcat 中收到以下消息并且无法接收短信

12-29 14:28:27.111 2030-2044/? I/ActivityManager: 启动过程 8428:com.tatvic.vatsal.test_uninstall_tracking/u0a666 用于广播 com.tatvic.vatsal.test_uninstall_tracking/com.tatvic.lib.uit.SmsReceiver

【问题讨论】:

发布清单的其余部分。除了记录消息之外,onReceive() 还会做其他事情吗?如果是这样,也发布该代码。您在 Logcat 中看到任何异常吗?不要过滤 logcat,否则你可能会错过一些有价值或重要的东西。 试试这个它可能是工作 ***.com/a/41221852/5488468 【参考方案1】:

由于您的接收器应该在您的应用程序之外调用,您应该将其android:exported 设置为true

如果此组件可供其他应用程序使用,则设置为 true。来自&lt;activity&gt;&lt;receiver&gt;&lt;service&gt;&lt;provider&gt; 标签中的android:exported

【讨论】:

设置导出为 true 现在在 logcat 中显示此消息,I/ActivityManager: Start proc 7308:com.tatvic.vatsal.test_uninstall_tracking/u0a666 for broadcast com.tatvic.vatsal.test_uninstall_tracking/com .tatvic.lib.uit.SmsReceiver @Apurva 这不是错误。它只是告诉 Activity Manager 启动了您的应用程序的进程,因为您的广播接收器已启用。 (即它收到了广播) 但是没有调用 SmsRecevier 的 onReceive 方法。即使应用程序关闭,我如何在那里接收回调。

以上是关于权限拒绝:广播 Intent act=android.provider.Telephony.SMS_RECEIVED的主要内容,如果未能解决你的问题,请参考以下文章

调用相机应用程序(权限拒绝:启动 Intent )

Android:权限拒绝:以撤销权限启动 Intent android.permission.CAMERA

广播接收器权限被拒绝

Android 广播 - 使用权限发送和接收

权限拒绝:不允许在android中发送广播

Android Intent FileProvider“权限被拒绝”在谷歌地球中打开KML文件?