web-dev-qa-db-fra.com

ACCESS_FINE_LOCATION ne fonctionne pas

Ce qui suit est mon 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>

Comme vous pouvez le constater, j'ai ajouté les autorisations nécessaires pour obtenir des informations sur l'emplacement. Cependant, lorsque je lance mon application, j'obtiens une erreur étrange ...

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

J'ai déjà ajouté ceci dans mon AndroidManifest.xml, alors pourquoi cette erreur est-elle générée? J'ai essayé de redémarrer Android Studio. J'ai essayé d'effacer les données de l'émulateur. J'ai essayé Gradle -> Clean. Aucun de ceux-ci n'a aidé. Qu'est-ce qui se passe ici?

Est-il possible que mon émulateur Android bloque le GPS ou autre chose?

6
Bolboa

Avez-vous essayé de demander des autorisations au moment de l'exécution ..

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

Vous pouvez vérifier les détails sur ce site Demander des autorisations au moment de l'exécution

C’est ainsi que vous demandez à l’utilisateur d’accorder une autorisation au moment de l’exécution après Android 6.0

Vous pouvez vérifier Erreur de permission Android 6.0 répondre également.

J'espère que ça vous aidera.

6
ELITE

ce dont vous avez besoin, c'est l'autorisation d'exécution. techniquement parlant, depuis os 6, la permission manifeste ne veut rien dire.

google "autorisation d'exécution Android gps" et vous obtiendrez des tonnes de réponses sur ce qu'il faut faire et pourquoi.

4
TooManyEduardos

Avec React-Native, vous devez utiliser PermissionsAndroid pour obtenir des autorisations sur les appareils Android 6.0 (ou version ultérieure).

Ajoutez ces lignes à vos fichiers

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

puis appelez requestLocationPermission() avant d'utiliser l'emplacement

2
MujtabaFR