我正在开发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中显示的设备
答案 0 :(得分:-2)
https