【问题标题】:React Native PermissionsAndroid.check always returns trueReact Native PermissionsAndroid.check 总是返回 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,与启用或禁用权限的应用无关。

【问题讨论】:

    标签: android react-native android-permissions


    【解决方案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:“返回一个关于是否已授予指定权限的承诺解析为布尔值。”。此外,如果我打印该值,它是一个布尔值,即为真。
    猜你喜欢
    • 1970-01-01
    • 2018-09-09
    • 2013-08-06
    • 2017-05-10
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多