ACCESS_FINE_LOCATION not working

风格不统一 提交于 2019-12-09 18:16:36

问题


The following is my AndroidManifest.xml...

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

<uses-sdk
    android:minSdkVersion="16"
    android:targetSdkVersion="22" />

<application
  android:name=".BeaconApp"
  android:allowBackup="true"
  android:label="@string/app_name"
  android:icon="@mipmap/ic_launcher"
  android:theme="@style/AppTheme">
  <activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>
  <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="AIzaSyBqhOHH31FYObdzoVW9TmQsv62TOP0LSLI"/>
</application>

As you can see I added the proper permissions necessary to get location info. However, when I run my app, I get a strange error...

Looks like the app doesn't have permission to access location.
Add the following line to your app's AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

throwLocationPermissionMissing
...etc

I already added this in my AndroidManifest.xml so why am I getting this error. I tried restarting Android Studio. I tried Wiping Data from emulator. I tried Gradle -> Clean. None of these helped. What is going on here?

Is it possible that my android emulator is blocking GPS or something?


回答1:


Have you tried asking permissions at runtime..

int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
    Manifest.permission.ACCESS_FINE_LOCATION);
if(permissionCheck != PackageManager.PERMISSION_GRANTED) {
    // ask permissions here using below code
    ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
            REQUEST_CODE);
}

You can check details on this site Requesting Permissions at Run Time

This is the way you ask user to grant permission at runtime after android 6.0

You can check Android 6.0 Permission Error answer also.

Hope it'll help you.




回答2:


what you need is the runtime permission. technically speaking, since os 6, the manifest permission doesnt mean anything.

google "android runtime gps permission" and you'll get tons of answers on what to do and why.




回答3:


With React-Native you have to use PermissionsAndroid to get permissions on Android 6.0 (or later) devices..

Add these lines to your files

import { PermissionsAndroid } from 'react-native';

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

then call requestLocationPermission() before using the location



来源:https://stackoverflow.com/questions/40955070/access-fine-location-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!