无法解析 Manifest.permission.ACCESS_FINE_LOCATION

Cannot resolve Manifest.permission.ACCESS_FINE_LOCATION

向我的清单文件添加权限时,以下 xml 有效。

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

然而,这个xml不起作用。

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

我应该使用哪一个?如果它是第一个,为什么它不起作用?我该如何解决?

另外,我得到一个 Android 6.0 运行时权限相关异常:

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

当我尝试将权限添加到字符串数组以检查权限时,Android Studio 告诉我它无法解析以下代码中的 Manifest.permission

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

为什么要这样做?我该如何解决?

对于第一部分,您应该使用 <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 来了解有关如何在清单中声明权限的更多信息。

关于您的运行时权限问题:

With uses-permissions Cannot resolve that..

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

Why?

确保您使用的是 android.Manifest 而不是 my.app.package.Manifest。很多时候 Android Studio 将默认为后者而不是前者。

因此,您的新代码行将如下所示:

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

编辑:我重新格式化了我的答案。

编辑 2:小心导入 android.Manifest。如果您还导入 可能会导致问题 my.app.package.Manifest。除此之外,import android.Manifest 是解决此问题的另一种有效方法。

如果您正在处理动态权限和任何权限,如 ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION 给出错误 "cannot resolve method PERMISSION_NAME" 在这种情况下,使用权限名称编写代码,然后 重建项目 这将 重新生成 清单(Manifest.permission)文件

当您在 Manifest 上按 Alt+Enter 时,Android Studio建议导入几个选项​​。您应该选择 import android.Manifest; 而不是 import <your.package.name>.Manifest;.

改变这个

Manifest.permission.ACCESS_FINE_LOCATION

进入这个

android.Manifest.permission.ACCESS_FINE_LOCATION

试试这个:

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

        }

在 运行 之前尝试此操作,确保您有权访问..

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

试试这个!由于 ACCESS_FINE_LOCATION 在以下包中可用,因此添加:

import android.Manifest;

我在使用时遇到了类似的问题;

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

无法解析符号 READ_CONTACTS

但是在使用时;

import android.Manifest;

开始识别了READ_CONTACT

改变

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

对此

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

您的问题将得到解决。

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

改为

android.manifest.permission.ACCESS_FINE_LOCATION

如果您已经在清单文件中正确设置了 uses.permissions,正如 hnilsen 已经提到的,只需替换您的行:

 Manifest.permission.ACCESS_FINE_LOCATION

来自这个:

 android.Manifest.permission.ACCESS_FINE_LOCATION

这可以解决您的问题。