Manifest.permission.ACCESS_FINE_LOCATION kann nicht aufgelöst werden

78

Beim Hinzufügen von Berechtigungen zu meiner Manifestdatei funktioniert die folgende XML-Datei.

 <permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Diese XML funktioniert jedoch nicht.

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

Welches soll ich verwenden? Wenn es das erste ist, warum würde es nicht funktionieren? Wie kann ich es reparieren?

Außerdem erhalte ich eine Ausnahme für Android 6.0-Laufzeitberechtigungen:

java.lang.SecurityException: "gps" location provider requires ACCESS_FINE_LOCATION permission.

Wenn ich versuche, die Berechtigung zu einem String-Array hinzuzufügen, um die Berechtigung zu überprüfen, teilt mir Android Studio mit, dass sie Manifest.permissionim folgenden Code nicht aufgelöst werden kann:

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

Warum sollte es das tun? Wie kann ich es reparieren?

Pablo Cegarra
quelle

Antworten:

221

Für den ersten Teil sollten Sie <uses-permission> gemäß der Android Devlopers-Website verwenden . Stellen Sie sicher, dass Sie Ihre Berechtigungen direkt unter dem <manifest>Tag und nicht in Ihrem <application>Tag deklarieren . Es ist schwer zu wissen, was Ihr Problem ist, ohne Ihre gesamte Manifestdatei zu sehen. Weitere Informationen zum Deklarieren von Berechtigungen in Ihrem Manifest finden Sie unter dem oben angegebenen Link .

In Bezug auf Ihr Problem mit Laufzeitberechtigungen:

Mit Verwendungsberechtigungen Kann das nicht beheben.

neuer String [] {Manifest.permission.ACCESS_FINE_LOCATION}

Warum?

Stellen Sie sicher, dass Sie android.Manifestanstelle von verwenden my.app.package.Manifest. Oft verwendet Android Studio standardmäßig Letzteres anstelle von Ersterem.

Ihre neue Codezeile würde also folgendermaßen aussehen:

new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION};

Edit: Ich habe meine Antwort neu formatiert.

Bearbeiten 2: Seien Sie vorsichtig beim Importieren android.Manifest. Dies kann zu Problemen führen, wenn Sie auch importieren my.app.package.Manifest. Anders als das import android.Manifestist eine andere gültige Weg , um dieses Problem zu beheben.

sonictt1
quelle
1
Die Verwendung von andorid.Manifest.permission.X anstelle von Manifest.permission.X hat dies für mich gelöst, danke.
Hnilsen
Ich bin neu in Android, daher kann ich nicht verstehen, wo ich "new String [] {android.Manifest.permission.ACCESS_FINE_LOCATION}" einfügen muss. diese Zeile im Android Studio.
anshuman burmman
91

ändere das

Manifest.permission.ACCESS_FINE_LOCATION

das sehr gut finden

android.Manifest.permission.ACCESS_FINE_LOCATION

fcicer
quelle
24

Versuche dies! Da ACCESS_FINE_LOCATION im folgenden Paket verfügbar ist, fügen Sie hinzu:

import android.Manifest;

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Sanket Parchande
quelle
Diese Art von Lösung ist besser als Kommentar, wenn Sie nicht sicher sind.
JJJ
6

Ich hatte ein ähnliches Problem, wo verwendet;

ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED 

wo es Symbol nicht auflösen konnte READ_CONTACTS.

Jedoch bei der Verwendung;

import android.Manifest;

Es begann zu erkennen READ_CONTACT

Madhur Bhatnagar
quelle
3

wenn Sie arbeiten an dynamischen Berechtigungen und jede Berechtigung wie ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION Fehler geben „kann nicht lösen Methode PERMISSION_NAME“ in diesem Fall schreiben Sie Code mit Erlaubnis Namen und dann Ihr Projekt neu erstellen dies regenerieren das Manifest (Manifest.permission) Datei

anoopbryan2
quelle
1

Wenn Sie bereits das haben uses.permissions Setup richtig in Ihrer Manifest - Datei, wie bereits von hnilsen erwähnt, ersetzen Sie einfach Ihre Linie:

 Manifest.permission.ACCESS_FINE_LOCATION

von diesem:

 android.Manifest.permission.ACCESS_FINE_LOCATION

Dies kann Ihr Problem lösen.

Marcelo Gumiero
quelle
0
 if (Build.VERSION.SDK_INT >= 23) {

            if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
                    || checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

                mapView.setMyLocationEnabled(true); 
            }
        }
        else
        {
            mapView.setMyLocationEnabled(true);

        }
Regis_AG
quelle
0

Versuchen Sie dies vor dem Ausführen. Stellen Sie sicher, dass Sie über die Berechtigung zum Zugriff verfügen.

try {
    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
} catch (SecurityException e) {
   dialogGPS(this.getContext()); // lets the user know there is a problem with the gps
}
Iam ByeBlogs
quelle
0

Veränderung

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

Dazu

new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}

Ihr Problem wird gelöst.

Hassnain Jamil
quelle
Dies scheint nur eine Wiederholung dieser bestehenden Antwort zu sein .
Pang
0
new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

ändere es auf

android.manifest.permission.ACCESS_FINE_LOCATION
Jagrit Vishwakarma
quelle
Hallo Jagrit Vishwakarma, meinst du, man sollte das new String[]{Teil entfernen ?
Pang
-2

Versuche dies:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_SELECT_PICTURE);
        return;
    }
Iam ByeBlogs
quelle
-2

Wenn Sie "Manifest" eingeben, sollte Android Studio Ihnen empfehlen, einige Manifest-Optionen auszuwählen. Sie sollten den einen Start Android anstelle des Namens Ihres Projekts wählen.

Wenn Sie auf die Referenz von Manifest.java zugreifen und feststellen, dass die Klasse "Berechtigung" nur 1-2 Zeilen enthält, verweisen Sie auf die falsche Manifestklasse.

Johnnyman
quelle