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 创建新项目