Доступ к прекрасному местоположению не работает

следующее мое 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>

как вы можете видеть, я добавил соответствующие разрешения, необходимые для получения информации о местоположении. Однако, когда я запускаю свое приложение, я получаю странную ошибку...

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

Я уже добавил Это в мой AndroidManifest.xml Итак, почему я получаю эту ошибку. Я попытался перезапустить Android Studio. Я попытался стереть данные из эмулятора. Я попробовал Gradle - > Clean. Ничего из этого не помогло. Что здесь происходит?

это возможно, что мой эмулятор android блокирует GPS или что-то еще?

3 ответов


вы пробовали спрашивать разрешения во время выполнения..

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);
}

вы можете проверить детали на сайте запрос разрешений во время выполнения

таким образом вы просите пользователя предоставить разрешение во время выполнения После android 6.0

вы можете проверить Android 6.0 Ошибка Разрешения ответ.

надеюсь, это поможет вам.


вам нужно разрешение среды выполнения. технически говоря, начиная с os 6, разрешение манифеста ничего не значит.

google "Android runtime gps разрешение", и вы получите тонны ответов о том, что делать и почему.


С React-Native вы должны использовать PermissionsAndroid чтобы получить разрешения на Android 6.0 (или более поздней версии) устройств..

добавьте эти строки в свои файлы

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)
  }
}

затем вызов requestLocationPermission() перед использованием местности