READ_PHONE_STATE的权限拒绝

时间:2016-08-17 16:34:23

标签: android broadcastreceiver android-permissions

我正在开发Android应用程序,需要在手机接到电话时收到通知。我使用BroadcastReceiver的方法,因为我想获得有关来电的通知,即使应用程序不活跃。因此,使用TelephonyManager和PhoneStateListener的方法不符合我的需要。 因此,我的应用程序在清单中具有适当的权限:

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

它还在清单中正确注册广播接收器:

<receiver android:enabled="true" android:name=".CallReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
</receiver>

类CallReceiver实现BroadcastReceiver,但是一旦我启动应用程序,它的方法onReceive的CallReceiver永远不会被调用,永远不会被调用。 原因是系统拒绝将Intent传送到我的广播接收器,因为每次电话响铃时我都会在日志中发现以下消息:

W/BroadcastQueue: Permission Denial: receiving Intent { act=android.intent.action.PHONE_STATE flg=0x10 (has extras) } to com.example.incomingcall/.CallReceiver requires android.permission.READ_PRIVILEGED_PHONE_STATE due to sender android (uid 1000)
W/BroadcastQueue: Permission Denial: receiving Intent { act=android.intent.action.PHONE_STATE flg=0x10 (has extras) } to com.example.incomingcall/.CallReceiver requires android.permission.READ_PHONE_STATE due to sender android (uid 1000)

正如我解释的那样,我已经在清单中放置了READ_PHONE_STATE权限,而此处指定的其他权限是系统权限,无法放入清单。任何想法如何克服这个问题? 使用Android 6.0.1在Nexus 6p中显示的设备

1 个答案:

答案 0 :(得分:-2)

https