android - 如何在运行时在 React Native 中请求 Android 设备位置的权限?

标签 android react-native permissions geolocation

我一直在尝试将 React Native 的 GeoLocalisation 用于 Android 应用程序。文档记录不佳的模块可在此处找到 https://facebook.github.io/react-native/docs/geolocation.html . 根据文档,您使用 AndroidManifest.xml 文件中的以下代码处理 Android 上的位置权限

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

但是,我的在线研究表明,上述代码行对于 ANDROID >= 6.0

的版本是无用的

由于我的 GeoLocation 实现当前无法正常工作,我没有其他理由相信位置权限没有得到正确处理。

如何在运行时为 React Native Android App 成功请求位置权限? 提前致谢!

最佳答案

我通过更改 android/app/build.gradle 中的 targetSdkVersion(与 compileSdkVersion 相同,在我的例子中为 23)解决了这个问题。

编辑位于 android/src/main 中的 AndroidManifest.xml 并添加

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

下一个:

import { PermissionsAndroid } from 'react-native';

然后添加这个方法:

export async function requestLocationPermission() 
{
  try {
    const granted = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
      {
        'title': 'Example App',
        'message': 'Example App access to your location '
      }
    )
    if (granted === PermissionsAndroid.RESULTS.GRANTED) {
      console.log("You can use the location")
      alert("You can use the location");
    } else {
      console.log("location permission denied")
      alert("Location permission denied");
    }
  } catch (err) {
    console.warn(err)
  }
}

并在运行时请求位置时访问该方法

async componentWillMount() {
    await requestLocationPermission()
}

关于android - 如何在运行时在 React Native 中请求 Android 设备位置的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45822318/

相关文章:

android - 为什么标题不在工具栏居中?

javascript - React-Spring错误: 'animated' library from react-spring returns ERROR element type is invalid

react-native - 在 React Native 中运行时下载字体

ios - 在React Native中从照片/图像提取文本的最佳方法?

android - 使用 DexGuard 加密 Assets (JSON)

android - 在 Android gradle 项目中使用 junit 类别对 robolectric 测试进行分组

android - 如何在 onPostExecute() 中从 doInBackground() 添加数据到 BaseAdapter?

java - 请求权限错误

c# - 对 MVC 站点具有特定要求的粒度权限

Android异常: java. io.IOException:打开失败:EACCES(权限被拒绝)