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

jun*_*Man 20 permissions android geolocation react-native

我一直在尝试将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" />
Run Code Online (Sandbox Code Playgroud)

但是,我的在线研究表明,对于ANDROID> = 6.0的版本,上面的代码行是无用的

由于我的GeoLocation实现目前无法正常工作,我没有其他理由,只能相信未正确处理位置权限.

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

Jag*_*esh 21

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

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

   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)

//下一个 :

 import { PermissionsAndroid } from 'react-native';
Run Code Online (Sandbox Code Playgroud)

//然后添加此方法:

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)
  }
}
Run Code Online (Sandbox Code Playgroud)

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

   async componentWillMount() {
    await requestLocationPermission()
    }
Run Code Online (Sandbox Code Playgroud)

  • 它对我不起作用,所以我只是从类中的任何地方删除了await关键字。这对我有用。 (2认同)

小智 16

这不适合我

if (granted === PermissionsAndroid.RESULTS.GRANTED) {
}
Run Code Online (Sandbox Code Playgroud)

我提到了https://facebook.github.io/react-native/docs/permissionsandroid.html#request,check ()返回一个布尔值

const granted = await PermissionsAndroid.check( PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION );

if (granted) {
  console.log( "You can use the ACCESS_FINE_LOCATION" )
} 
else {
  console.log( "ACCESS_FINE_LOCATION permission denied" )
}
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用 react native PermissionsAndroid 来请求权限:https : //facebook.github.io/react-native/docs/permissionsandroid.html#request

或者,一个更简单的选择是使用一个为你做的库,比如https://github.com/yonahforst/react-native-permissions