我正在尝试在 Android 应用程序中检测电话,但在接到电话时收到以下消息:
08-23 15:16:04.685 Vodafone VFD 600 Warning 850 BroadcastQueue Permission Denial: receiving Intent { act=android.intent.action.PHONE_STATE flg=0x10 (has extras) } to com....LogCalls requires android.permission.READ_PHONE_STATE due to sender android (uid 1000)
08-23 15:16:04.549 Vodafone VFD 600 Warning 850 BroadcastQueue Permission Denial: receiving Intent { act=android.intent.action.PHONE_STATE flg=0x10 (has extras) } to com....LogCalls requires android.permission.READ_PRIVILEGED_PHONE_STATE due to sender android (uid 1000)
我的 AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com...." android:installLocation="preferExternal">
<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="27" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<application android:label="myapp" android:icon="@drawable/logo">
</application>
</manifest>
还有我的广播接收器:
[BroadcastReceiver]
[IntentFilter(new[] {TelephonyManager.ActionPhoneStateChanged,Intent.ActionNewOutgoingCall })]
public class LogCalls : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
if (intent.Action == TelephonyManager.ActionPhoneStateChanged)
{
Console.WriteLine("state changed");
}
}
}
我缺少什么?
首先,第三方应用程序不得获取READ_PRIVILEGED_PHONE_STATE
允许。看特权权限白名单:
特权应用程序是位于系统映像上的 /system/priv-app 目录中的系统应用程序。从历史上看,设备实施者几乎无法控制哪些签名|特权权限可以授予特权应用程序。从 Android 8.0 开始,实现者可以在 /etc/permissions 目录中的系统配置 XML 文件中显式将特权应用列入白名单。这些 XML 文件中未明确列出的应用程序不会被授予特权。
其次,当您的应用程序在 API 23 及更高版本上运行时,您需要首先要求用户授予您READ_PHONE_STATE
运行时的权限,因为它被认为是“危险”权限(请参阅权限概览).
您需要按照以下网址的说明进行操作请求应用程序权限在运行时向用户请求权限,只有授予该权限后,您才能BroadcastReceiver
接收意图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)