无法解析Manifest.permission.ACCESS_FINE_LOCATION

问题描述 投票:0回答:14

向我的清单文件添加权限时,以下 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}

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

android service permissions gps manifest
14个回答
271
投票

对于第一部分,您应该使用

<uses-permission>
根据 Android Devlopers 站点。尝试确保您在 <manifest> 标签下
直接
声明您的权限,而不是在
<application>
标签中。如果不查看整个清单文件,就很难知道问题所在。 查看我上面发布的链接,了解有关如何在清单中声明权限的更多信息。

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

使用权限无法解决该问题..

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

为什么?

确保您使用的是

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
是解决此问题的另一种有效方法。


125
投票

改变这个

Manifest.permission.ACCESS_FINE_LOCATION

进入这个

android.Manifest.permission.ACCESS_FINE_LOCATION


36
投票

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

import android.Manifest;


11
投票

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

 Manifest.permission.ACCESS_FINE_LOCATION

这个:

 android.Manifest.permission.ACCESS_FINE_LOCATION

这可以解决你的问题。


10
投票

添加此导入android.Manifest; enter image description here


9
投票

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

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

无法解析符号

READ_CONTACTS

但是在使用时;

import android.Manifest;

它开始认识了

READ_CONTACT


3
投票

如果您正在处理动态权限和任何权限,例如 ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION 给出错误 “无法解析方法 PERMISSION_NAME” 在这种情况下,请使用权限名称编写代码,然后 重建您的项目 这将 重新生成 清单(清单.权限)文件


1
投票
new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

更改为

android.manifest.permission.ACCESS_FINE_LOCATION

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

        }

0
投票

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

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

0
投票

改变

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

对此

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

您的问题将会得到解决。


0
投票

对于 Android 12 及更高版本...这听起来有点有趣...尝试 chatGPT 以获得您正在寻找的答案。

这是我使用的提示

向我展示如何使用 java 和 minSdkVersion 29 向 Android studio 中的 mainactivity 添加蓝牙权限

我们所有程序员的新时代!!


-1
投票

当您在 Manifest 上按 Alt+Enter 时,Android Studio 会建议一些导入选项。您应该选择

import android.Manifest;
而不是
import <your.package.name>.Manifest;


-2
投票

试试这个:

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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.