ACCESS_FINE_LOCATION SecurityException en dépit de la spécification de l'autorisation dans le fichier manifest
Mon application tente d'accéder à l'appareil et l'emplacement de l', j'ai inclus les éléments suivants dans la AndroidManifest.xml
:
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.app">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application>
<meta-data android:name="com.google.android.gms.version" />
</application>
</manifest>
J'ai mis en œuvre la GoogleApiClient.ConnectionCallbacks
comme suit pour accéder à l'emplacement de service:
public class BackgroundLocationService implements
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
private static final String TAG = BackgroundLocationService.class.getSimpleName();
private static GoogleApiClient googleApiClient;
private static PendingIntent locationCallback;
public static int LOCATION_INTERVAL = 10000;
public static int FAST_INTERVAL = 5000;
@Override
public void onConnected(Bundle bundle) {
Log.i(TAG, "Connected to Google API");
LocationRequest request = new LocationRequest();
request.setInterval(LOCATION_INTERVAL);
request.setFastestInterval(FAST_INTERVAL);
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, request, locationCallback);
}
@Override
public void onConnectionSuspended(int i) {
Log.i(TAG, Integer.toString(i));
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.i(TAG, connectionResult.toString());
}
}
Quand j'déclencher le service de localisation de l'appel, l'exception suivante est générée:
java.lang.SecurityException: Client must have ACCESS_FINE_LOCATION permission to request PRIORITY_HIGH_ACCURACY locations.
at android.os.Parcel.readException(Parcel.java:1599)
at android.os.Parcel.readException(Parcel.java:1552)
at com.google.android.gms.location.internal.zzi$zza$zza.zza(Unknown Source)
at com.google.android.gms.location.internal.zzk.zza(Unknown Source)
at com.google.android.gms.location.internal.zzl.zza(Unknown Source)
at com.google.android.gms.location.internal.zzd$7.zza(Unknown Source)
at com.google.android.gms.location.internal.zzd$7.zza(Unknown Source)
at com.google.android.gms.internal.zzlb$zza.zzb(Unknown Source)
at com.google.android.gms.internal.zzlf.zza(Unknown Source)
at com.google.android.gms.internal.zzlf.zzb(Unknown Source)
at com.google.android.gms.internal.zzli.zzb(Unknown Source)
at com.google.android.gms.location.internal.zzd.requestLocationUpdates(Unknown Source)
at com.localz.spotzpush.sdk.service.BackgroundLocationService.onConnected(BackgroundLocationService.java:45)
at com.google.android.gms.common.internal.zzk.zzh(Unknown Source)
at com.google.android.gms.internal.zzlg.zznU(Unknown Source)
at com.google.android.gms.internal.zzlg.onConnected(Unknown Source)
at com.google.android.gms.internal.zzli$2.onConnected(Unknown Source)
at com.google.android.gms.common.internal.zzj$zzg.zzpf(Unknown Source)
at com.google.android.gms.common.internal.zzj$zza.zzc(Unknown Source)
at com.google.android.gms.common.internal.zzj$zza.zzt(Unknown Source)
at com.google.android.gms.common.internal.zzj$zzc.zzph(Unknown Source)
at com.google.android.gms.common.internal.zzj$zzb.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Je suis l'aide d'un appareil pour produire ce problème et que vous avez été de me gratter la tête sur les raisons de l'exception est levée.
Qu'est-ce que votre
Hey @JBirdVegas, ils sont 15 et 23, respectivement
minSdkVersion
et targetSdkVersion
?Hey @JBirdVegas, ils sont 15 et 23, respectivement
OriginalL'auteur gyamana | 2015-10-29
Vous devez vous connecter pour publier un commentaire.
Le problème a été causé par une nouvelle fonctionnalité pour Android 6.0.
Début dans Android 6.0 (API level 23), les utilisateurs d'accorder des autorisations pour les applications, tandis que l'application est en cours d'exécution, et non pas lors de l'installation de l'application.
http://developer.android.com/training/permissions/requesting.html
De contourner le problème lorsque l'autorisation n'est pas explicitement accordé, je l'avais mis dans une case pour envelopper le service de localisation des appels (comme par Google de la Documentation, légèrement modifiée).
Google Documentation des étapes de la procédure de demande d'autorisations nécessaires.
Mise à JOUR 12 Oct 2016
Ajoutant @Siddharth'mise à jour pour inclure plus de répondre de façon utile pour
checkSelfPermission()
Veuillez consulter ma réponse et apporter les corrections nécessaires. Je vais supprimer ma réponse si vous pouvez apporter des corrections à votre réponse.
OK, merci pour ce que, permettra de mettre à jour ma réponse maintenant
Aussi, la mise à jour Android Studio pour la dernière version est de permettre de vérifier automatiquement, drapeau et de résoudre ce problème.
avez-vous réussi à résoudre ce problème ? Je suis confronté à des problèmes similaires sur le Galaxy J3 J3 et pro. Étrange pour un mobile fonctionnant sur Android 5.1
OriginalL'auteur gyamana
Extrait de Google Documents. Semble être la plus acceptée de répondre sur ce fil manque certaines informations critiques sur le retour d'appel de l'async
checkSelfPermission
.S'il vous plaît confirmer. Si pas, je vais supprimer cette réponse.
OriginalL'auteur Siddharth
Défaut de mise en oeuvre de
LocationSource
n'est pas nécessairement utiliser le GPS pour le retour des endroits précis.Si je retire la permission
"ACCESS_FINE_LOCATION"
dans le fichier de Manifeste, dès que j'essaie d'afficher la carte, l'application se bloqueC'est parce que l'implémentation par défaut utilise
LocationClient
avecLocationRequest.PRIORITY_HIGH_ACCURACY
.GoogleMap.setMyLocationEnabled
lorsque vous demandez seulementACCESS_COARSE_LOCATION
autorisation, mais commutateurs àLocationRequest.PRIORITY_BALANCED_POWER_ACCURACY
.Voir ce Android: Google Maps emplacement avec une faible utilisation de la batterie
OriginalL'auteur Anoop M
Pour tout le monde d'avoir une erreur avec gyamana réponse au Manifeste.la permission.ACCESS_FINE_LOCATION erreur. Assurez-vous que vous utilisez android.Manifeste à la place de mon.app.package.Le manifeste.
OriginalL'auteur F34R