it-swarm.com.de

Nur Emission des Berechtigungsfehlers ACCESS_FINE_LOCATION

Ich habe einen seltsamen Fehler, während ich den Emulator NUR benutzt habe ... Ich habe eine Frage gefunden, die vor 9 Monaten das gleiche Problem ohne Antworten hatte ...

Ich benutze Google Play Services-Standorte, um Standorte in meiner App abzurufen. Ich bin mir meiner offensichtlichen Berechtigungen sicher. Alles funktioniert perfekt auf meinem Telefon. Das Problem tritt nur auf, wenn Sie einen Emulator verwenden Windows-Maschinen.

Ich bezweifle, dass Emulatoren diese grundlegende Funktion nicht unterstützen!

hier ist mein Manifest-Code:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.orderme.ordermeandroid" >
<uses-permission Android:name="Android.permission.INTERNET"></uses-permission>
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION"/>

und hier feuert die Ausnahme:

    LocationRequest mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(10000);
    mLocationRequest.setFastestInterval(5000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient,mLocationRequest,this);

stack-Trace:

08-26 14:01:19.699  10157-10157/com.orderme.ordermeandroid E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.orderme.ordermeandroid, PID: 10157
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.zzg$zza$zza.zza(Unknown Source)
        at com.google.Android.gms.location.internal.zzi.zza(Unknown Source)
        at com.google.Android.gms.location.internal.zzj.zza(Unknown Source)
        at com.google.Android.gms.location.internal.zzd$1.zza(Unknown Source)
        at com.google.Android.gms.location.internal.zzd$1.zza(Unknown Source)
        at com.google.Android.gms.common.api.zzc$zza.zzb(Unknown Source)
        at com.google.Android.gms.common.api.zzf.zza(Unknown Source)
        at com.google.Android.gms.common.api.zzf.zzb(Unknown Source)
        at com.google.Android.gms.common.api.zzi.zzb(Unknown Source)
        at com.google.Android.gms.location.internal.zzd.requestLocationUpdates(Unknown Source)
        at com.orderme.ordermeandroid.Main.MainActivity.onConnected(MainActivity.Java:184)
        at com.google.Android.gms.common.internal.zzk.zzh(Unknown Source)
        at com.google.Android.gms.common.api.zzg.zznt(Unknown Source)
        at com.google.Android.gms.common.api.zzg.onConnected(Unknown Source)
        at com.google.Android.gms.common.api.zzi$2.onConnected(Unknown Source)
        at com.google.Android.gms.common.internal.zzj$zzg.zzoD(Unknown Source)
        at com.google.Android.gms.common.internal.zzj$zza.zzc(Unknown Source)
        at com.google.Android.gms.common.internal.zzj$zza.zzs(Unknown Source)
        at com.google.Android.gms.common.internal.zzj$zzc.zzoF(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)
23
Hassan Khallouf

Meine Vermutung ist, dass Sie dies auf einem Android 6.0+ Emulator ausführen und eine targetSdkVersion von 23 oder höher haben.

In diesem Fall sind ACCESS_COARSE_LOCATION und ACCESS_FINE_LOCATION Bestandteil von dem Android 6.0-Laufzeitberechtigungssystem . Überarbeiten Sie entweder Ihre App, um an diesem System teilzunehmen, oder legen Sie Ihre targetSdkVersion unter 23 ab.

37
CommonsWare

in Android 6.0 (API-Ebene 23) erteilen Benutzer Berechtigungen für Apps, während die App ausgeführt wird, nicht bei der Installation der App

So prüfen Sie, ob Sie die Berechtigung haben:

// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
        Android.Manifest.permission.ACCESS_FINE_LOCATION);

So fordern Sie die erforderlichen Berechtigungen an:

if (ContextCompat.checkSelfPermission(thisActivity,
            Manifest.permission.ACCESS_FINE_LOCATION)
    != PackageManager.PERMISSION_GRANTED) {

    ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
            MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);

    // MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION is an
    // app-defined int constant. The callback method gets the
    // result of the request.
}

So greifen Sie auf das Ergebnis der Anfrage zu:

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
    case MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION: {
        // If request is cancelled, the result arrays are empty.
        if (grantResults.length > 0
            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            // permission was granted, yay! Do the task you need to do.

        } else {

            // permission denied, boo! Disable the functionality that depends on this permission.
        }
        return;
    }
}
}

Quelle: http://developer.Android.com/training/permissions/requesting.html

Weitere Informationen zu Berechtigungen: https://guides.codepath.com/Android/Understanding-App-Permissions

15
Fabich

Sie können den aktuellen Speicherort nicht vom Emulator abrufen. Sie können es aber auch emulieren, um Ihren Code zu testen. Hier finden Sie, wie Sie emulieren.

EDIT1: Es gibt eine Notiz hier

Hinweis: Wenn Sie sowohl NETWORK_PROVIDER als auch GPS_PROVIDER verwenden, müssen Sie nur die Berechtigung ACCESS_FINE_LOCATION anfordern, da sie die Berechtigung für beide Anbieter enthält. (Die Berechtigung für ACCESS_COARSE_LOCATION enthält nur die Berechtigung für NETWORK_PROVIDER.)

Sie sollten nur die Berechtigung ACCESS_FINE_LOCATION verwenden. Vielleicht hilft das.

4
kgnkbyl

Das Problem wurde durch eine neue Funktion für Android 6.0 verursacht. hoffe seine Arbeit ... 

Ab Android 6.0 (API-Ebene 23) erteilen Benutzer Berechtigungen, während die App ausgeführt wird, nicht für die Installation der App.

http://developer.Android.com/training/permissions/requesting.html

Um das Problem zu umgehen, wenn die Berechtigung nicht explizit erteilt wird, hatte ich einen Check zum Einschließen von Standortdienstanrufen (gemäß der Google-Dokumentation, geringfügig geändert) aktiviert.

int permissionCheck = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION);

if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
    //Execute location service call if user has explicitly granted ACCESS_FINE_LOCATION..
}

In der Google-Dokumentation wird auch beschrieben, wie Sie die erforderlichen Berechtigungen anfordern.

1
Mahendran Candy
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />

bei einigen Manifestationen fehlt eine Zeile, die die Berechtigung von ACCESS_FINE_LOCATION erteilt. Sie müssen es also im Manifest erwähnen.

Ich habe das gemacht und mein Problem wurde gelöst.

Dies geschieht im Allgemeinen, weil wir die Berechtigung im Manifest erteilt haben, sodass die App ein Problem verursachen würde, da sie nicht auf die Berechtigungen zugreifen kann und die Datei abstürzt.

<?xml version="1.0" encoding="utf-8"?>


<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
<application
    Android:allowBackup="true"
    Android:icon="@mipmap/ic_launcher"
    Android:label="@string/app_name"
    Android:supportsRtl="true"
    Android:theme="@style/AppTheme" >
    <activity Android:name=".MainActivity" >
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />

            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

0
Reeya