Cannot resolve Manifest.permission.ACCESS_FINE_LOC

2019-01-21 18:51发布

问题:

When adding permissions to my manifest file, the below xml works.

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

However, this xml doesn't work.

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

Which one am I supposed to be using? If it's the first one, why wouldn't it work? How can I fix it?

Also, I am getting an Android 6.0 runtime permissions related exception:

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

When I try to add the permission to a String array in order to check the permission, Android Studio tells me it can't resolve Manifest.permission in the below code:

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

Why would it be doing this? How can I fix it?

回答1:

For the first part, you should be using <uses-permission> according the the Android Devlopers site. Try making sure you declare your permissions directly under the <manifest> tag, not in your <application> tag. It's hard to know what your problem is without seeing your entire manifest file. Check out the link I posted above for more info on how to declare permissions in your manifest.

In regards to your runtime permissions problem:

With uses-permissions Cannot resolve that..

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

Why?

Make sure you're using android.Manifest instead of my.app.package.Manifest. A lot of times Android Studio will default to the latter instead of the former.

So, your new line of code would look like:

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

Edit: I reformatted my answer.

Edit 2: Be wary of importing android.Manifest. It can cause issues if you're also importing my.app.package.Manifest. Other than that import android.Manifest is another valid way to resolve this issue.



回答2:

change this

Manifest.permission.ACCESS_FINE_LOCATION

into this

android.Manifest.permission.ACCESS_FINE_LOCATION



回答3:

Try this! Since ACCESS_FINE_LOCATION available in following package so Add:

import android.Manifest;

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



回答4:

I had a similar problem where used;

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

where it could not resolve symbol READ_CONTACTS.

However on using;

import android.Manifest;

It started to recognize READ_CONTACT



回答5:

if you are working on dynamic permissions and any permission like ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION giving error "cannot resolve method PERMISSION_NAME" in this case write you code with permission name and then rebuild your project this will regenerate the manifest(Manifest.permission) file



回答6:

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

        }


回答7:

Try this before running, make sure you have permission to access..

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


回答8:

Change

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

To this

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

Your problem will be resolved.



回答9:

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

change it to

android.manifest.permission.ACCESS_FINE_LOCATION


回答10:

If you have already the uses.permissions setup correctly in your manifest file, as already mentioned by hnilsen, just replace your line:

 Manifest.permission.ACCESS_FINE_LOCATION

by this one:

 android.Manifest.permission.ACCESS_FINE_LOCATION

This can solve your problem.



回答11:

Try this:

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


回答12:

When you type "Manifest", Android Studio should suggest you to choose a few options of Manifest. You should choose the one start android instead of the name of your project.

If you access the reference of Manifest.java and you can find there is only 1-2 lines in "Permission" class, then you are referencing the wrong manifest class.