React Native PermissionsAndroid.check 总是返回 true
Posted
技术标签:
【中文标题】React Native PermissionsAndroid.check 总是返回 true【英文标题】:React Native PermissionsAndroid.check always returns true 【发布时间】:2021-06-21 09:02:08 【问题描述】:根据 React Native 文档,Permissionsandroid.check
应该返回一个布尔值,显示是否已授予相应权限,但对我来说,这始终是true
,独立于我启用/禁用应用程序的任何权限我'米建筑。
我在 React Native Github 上没有发现任何关于此的问题,所以我认为这比 React Native 更多是我的问题。我在这里做错了什么/误解了什么?
系统:
反应原生:0.63 Android 模拟器:Pixel 4 API 29例子:
async function checkPermissions(): void
const hasCameraPermission = await PermissionsAndroid.check(
PermissionsAndroid.PERMISSIONS.CAMERA
);
const hasStoragePermission = await PermissionsAndroid.check(
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE
);
console.log(`checkPermissions camera=$JSON.stringify(hasCameraPermission, null, 2), storage=$JSON.stringify(hasStoragePermission, null, 2)`);
结果始终为checkPermissions camera=true, storage=true
,与启用或禁用权限的应用无关。
【问题讨论】:
【参考方案1】:我认为这些权限已被 google play 过滤
注意:在某些情况下,您请求的权限会影响 Google Play 过滤您的应用程序的方式。
如果您请求与硬件相关的权限(例如 CAMERA),Google Play 会假定您的应用程序需要底层硬件功能,并从不提供该功能的设备中过滤掉该应用程序。
要控制过滤,请始终在元素中显式声明硬件功能,而不是依靠 Google Play 来“发现”元素中的要求。然后,如果您想禁用对特定功能的过滤,您可以在声明中添加 android:required="false" 属性。
或者不再需要权限
从 Android 4.4(API 级别 19)开始,您的应用不再需要请求 WRITE_EXTERNAL_STORAGE 权限
您可以阅读文档here
【讨论】:
我不这么认为 - 如果我请求权限,则会显示提示。另外,我正在写入全局下载目录,所以我仍然需要 WRITE_EXTERNAL_STORAGE。【参考方案2】:我认为你做的比较错误,你应该比较这个
PermissionsAndroid.RESULTS.GRANTED === hasStoragePermission
PermissionsAndroid.RESULTS.GRANTED === hasStoragePermission
这会给你结果,你是否有权限
干杯!!
【讨论】:
不,事实并非如此 - 文档明确地说返回了一个布尔值的 Promise:“返回一个关于是否已授予指定权限的承诺解析为布尔值。”。此外,如果我打印该值,它是一个布尔值,即为真。以上是关于React Native PermissionsAndroid.check 总是返回 true的主要内容,如果未能解决你的问题,请参考以下文章
react native 增加react-native-camera
更新 react-native-maps 以使用 create-react-native-app
react native 增加react-native-storage
React-Native 和 Expo:create-react-native-app 和 react-native init 之间的区别
什么是 react-native-cli 和 @react-native-community/cli?
React Native - 当 react-native 版本 > 0.55 时,无法通过 react-native-cli 创建新项目