【发布时间】:2018-01-23 05:43:33
【问题描述】:
我有一个 Android Cordova 应用程序,我正在使用 GPS,检查网络状态,读取/写入 Documents 文件夹并拍摄相机照片。这是我对清单 XML 文件的权限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.location.gps" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
清单文件由 Cordova 框架自动生成。出于某种原因,我看不到相机权限。安装时不再询问权限(从 Android 6 开始),而是在使用前询问权限。 我正确获得了 GPS 访问权限弹出窗口,但没有获得读/写 Documents 文件夹权限。我也从未获得过相机许可,尽管我可以在未经许可的情况下使用它。网络状态权限的情况相同(从未被询问)。
我发现 Android 权限方案非常混乱,在应用程序管理器下,我的应用程序已按预期获得位置和存储,但相机和网络状态丢失。
回顾一下,在应用程序内部,在实际代码中,我至少使用过一次这些设备
- GPS 细粒度
- GPS 粗略(可能是 Wifi SSID 三角测量技巧)
- 在文档上书写
- 阅读文档
- 读取网络状态(离线/Wifi/3G等)
- 从相机拍照
Cordova 框架编写了这个清单文件:
- android.permission.ACCESS_COARSE_LOCATION
- android.permission.ACCESS_FINE_LOCATION
- android.hardware.location.gps(为什么不是.permission?)
- android.permission.ACCESS_NETWORK_STATE
- android.permission.WRITE_EXTERNAL_STORAGE
在应用程序管理器中,我得到了这些选项:
- 位置
- 存储
所以基本上我得到了三组不同的权限:-(
【问题讨论】:
-
我不明白你的问题是什么。拥有三组不同的权限有什么问题。您可以使用您需要的那些权限,如果它们是关键权限,您需要检查它们是否已授予您,如果没有则要求用户授予权限。
-
我的问题是我在三个不同的地方看到不一致的权限列表:我的代码、清单文件、应用程序设置 UI.... 理想情况下,如果在我的代码上我使用相机,那么我应该在清单文件上看到摄像头权限,在应用程序设置 UI 上看到摄像头权限。任何其他设备(GPS、摄像头、网络、文件系统等)也是如此。
-
在你的代码中(在你的 config.xml 文件中)你声明你想要的权限,当你构建你的应用程序时,所有的清单文件都会被合并,所以如果你使用一些库和第三方工具,他们的所需的权限与您的权限一起合并到一个清单文件中。关于应用程序设置 UI 和清单中的不同呈现方式:那是因为在 UI 中,它们需要对所有不是程序员的所有用户进行自我解释,这并不意味着它们与您在您的清单中添加的不同manifest,只是呈现方式不同。
-
好的,但是为什么我在 UI 上看不到“相机”权限?我在我的应用上使用相机...在 UI 上我只看到“位置”和“存储”
-
您在发布的清单权限中没有
camera权限。如果是您的merged manifest,我不明白您如何访问相机。也许是因为您的手机已植根(只是猜测)?虽然这听起来也不适合有根设备。
标签: android cordova permissions gps