无法解决Manifest.permission.ACCESS_FINE_LOCATION


78

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

当我尝试将权限添加到String数组以检查权限时,Android StudioManifest.permission在以下代码中告诉我它无法解析:

new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

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

Answers:


221

对于第一部分,您应该<uses-permission> 根据Android Devlopers网站进行使用。尝试确保直接<manifest>标签下而不是在<application>标签下声明权限。在不查看整个清单文件的情况下很难知道您的问题所在。请查看我上面发布的链接,以获取有关如何在清单中声明权限的更多信息。

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

具有使用权限无法解决该问题。

新的字符串[] {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是解决此问题的另一种有效方法。


1
谢谢,使用andorid.Manifest.permission.X代替Manifest.permission.X为我解决了这个问题。
hnilsen

我是android的新手,所以我不明白我必须在哪里放置“ new String [] {android.Manifest.permission.ACCESS_FINE_LOCATION};” 这行在android studio中。
anshuman burmman

91

改变这个

Manifest.permission.ACCESS_FINE_LOCATION

进入这个

android.Manifest.permission.ACCESS_FINE_LOCATION


24

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

import android.Manifest;

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


如果您不确定,这种解决方案最好作为注释。
jjj

6

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

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”,则使用权限名称编写代码,然后重建项目,这将重新生成manifest(Manifest.permission)文件


1

如果您已经在清单文件中正确设置了use.permissions设置(如hnilsen所述),只需替换您的行即可:

 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
new String[]{Manifest.permission.ACCESS_FINE_LOCATION}

更改为

android.manifest.permission.ACCESS_FINE_LOCATION

嗨,Jagrit Vishwakarma,您的意思是应该删除该new String[]{部分吗?

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

-2

键入“清单”时,Android Studio应该建议您选择一些清单。您应该选择一个启动android而不是项目名称。

如果访问Manifest.java的引用,并且您发现“ Permission”类中只有1-2行,则您引用的是错误的清单类。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.