可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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.