未授予 Android 权限

Posted

技术标签:

【中文标题】未授予 Android 权限【英文标题】:Android permission not granted 【发布时间】:2016-03-08 09:30:45 【问题描述】:

我创建了自己的 android.jar,因此我可以使用隐藏的 API 调用 'DisplayManager.connectWifiDisplay()'

当我运行应用程序并调用该方法时,通过 Wifi Direct 连接到显示器后,

我得到以下异常:

java.lang.SecurityException:连接到 wifi 显示器所需的权限:用户 10105 和当前进程都没有 android.permission.CONFIGURE_WIFI_DISPLAY。 在 android.os.Parcel.readException(Parcel.java:1546) 在 android.os.Parcel.readException(Parcel.java:1499) 在 android.hardware.display.IDisplayManager$Stub$Proxy.connectWifiDisplay(IDisplayManager.java:344) 在 android.hardware.display.DisplayManagerGlobal.connectWifiDisplay(DisplayManagerGlobal.java:309) 在 android.hardware.display.DisplayManager.connectWifiDisplay(DisplayManager.java:404)

但是,我在 AndroidManifest 中包含了 CONFIGURE_WIFI_DISPLAYCONTROL_WIFI_DISPLAY 权限。关于我可能在这里遗漏的任何提示?

编辑:我使用的是 Android L。

【问题讨论】:

您使用的是装有 Android M 的设备吗? 你的测试设备的安卓版本是多少? @CalumMcCall 如果您愿意分享,我很乐意看到此代码。目前正在从事一个类似的项目。 @bearsmahoney 不幸的是,我手头没有代码。但是,实际执行此操作的步骤记录在此处:***.com/a/34182702/158703 @CalumMcCall 感谢您的提示!非常感谢。 【参考方案1】:

这两个权限都具有signature 保护级别(至少在 Android 6.0 上 - 您需要研究该保护级别多年来是否发生了变化)。

因此,除非您的应用由平台签名密钥签名,否则您无法拥有这些权限,尽管您的清单中有这些权限。

【讨论】:

我使用的是 5.1。假设他们确实具有签名保护级别,我有什么选择?是否可以自己使用签名密钥对应用程序进行签名?我可以绕过这个吗? @CalumMcCall:“我有什么选择?” -- 构建您自己的自定义 ROM,然后使用您用于签署 ROM 的相同签名密钥对应用程序进行签名。或者,与设备制造商达成协议,将您的应用与他们的设备捆绑在一起,并由他们的签名密钥签名。【参考方案2】:

我不知道这是否是你想要的,但你可以尝试使用这个权限:

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

【讨论】:

以上是关于未授予 Android 权限的主要内容,如果未能解决你的问题,请参考以下文章

清单中存在时未授予运行时权限(Android)[重复]

Android Studio 中未授予 Action_Call 权限

Android 11 用户无法授予后台位置权限?

尝试获取 READ_PHONE_STATE 权限时未显示 Android 权限对话框

Android运行时权限对话框未显示

添加到授予权限后未立即执行的联系人