【升级打怪实录】uniapp - android 静态声明权限和动态请求权限的区别

在 UniApp 的 manifest.json 中已配置了 RECORD_AUDIOCAMERAACCESS_FINE_LOCATION 权限,为何还需在代码中调用 plus.android.requestPermissions() 动态申请?

复制代码
// manifest.json android 权限配置
"android" : {
  "permissions" : [
    "<uses-permission android:name="android.permission.RECORD_AUDIO"/>",
    "<uses-permission android:name="android.permission.CAMERA"/>",
    "<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>",
  ]
}

答:

  1. Android 6.0+ (API ≥23)对敏感权限(如摄像头、麦克风、定位)需运行时动态申请必须由用户主动授权 ,仅静态声明(manifest.json)无法直接生效;低版本(Android ≤5.1)无需动态申请,安装时默认授予。
  2. 这三个权限属于"危险权限",涉及用户隐私,必须动态请求用户授权。
  3. UniApp 最终会将 manifest.json 中的权限声明写入生成的 AndroidManifest.xml 文件,但 仅静态声明权限不足以在 Android 6.0+ 设备上实际获得权限 。必须在代码中调用 plus.android.requestPermissions() 向用户请求授权。

plus.android.requestPermissions() 说明文档