Cannot resolve Manifest.permission.ACCESS_FINE_LOCATION

AndroidServicePermissionsGpsManifest

Android Problem Overview


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?

Android Solutions


Solution 1 - Android

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.

Solution 2 - Android

change this

Manifest.permission.ACCESS_FINE_LOCATION

into this

android.Manifest.permission.ACCESS_FINE_LOCATION

Solution 3 - Android

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

import android.Manifest;

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

Solution 4 - Android

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

Solution 5 - Android

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

Solution 6 - Android

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.

Solution 7 - Android

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

        }

Solution 8 - Android

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
}

Solution 9 - Android

Change

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

To this

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

Your problem will be resolved.

Solution 10 - Android

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

change it to

android.manifest.permission.ACCESS_FINE_LOCATION

Solution 11 - Android

When you press Alt+Enter on Manifest, Android Studio suggests a few options to import. You should choose the one import android.Manifest; instead of import <your.package.name>.Manifest;.

Solution 12 - Android

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPablo CegarraView Question on Stackoverflow
Solution 1 - Androidsonictt1View Answer on Stackoverflow
Solution 2 - AndroidfcicerView Answer on Stackoverflow
Solution 3 - AndroidSanket ParchandeView Answer on Stackoverflow
Solution 4 - AndroidMadhur BhatnagarView Answer on Stackoverflow
Solution 5 - Androidanoop ghildiyalView Answer on Stackoverflow
Solution 6 - AndroidMarcelo GumieroView Answer on Stackoverflow
Solution 7 - AndroidRegis_AGView Answer on Stackoverflow
Solution 8 - AndroidIam ByeBlogsView Answer on Stackoverflow
Solution 9 - AndroidHassnain JamilView Answer on Stackoverflow
Solution 10 - AndroidJagrit VishwakarmaView Answer on Stackoverflow
Solution 11 - AndroidjohnnymanView Answer on Stackoverflow
Solution 12 - AndroidIam ByeBlogsView Answer on Stackoverflow