向我的清单文件添加权限时,以下 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>
根据 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
是解决此问题的另一种有效方法。
改变这个
Manifest.permission.ACCESS_FINE_LOCATION
进入这个
android.Manifest.permission.ACCESS_FINE_LOCATION
试试这个!由于 ACCESS_FINE_LOCATION 在以下包中可用,因此添加:
import android.Manifest;
如果您已经在清单文件中正确设置了 uses.permissions,如 hnilsen 已经提到的,只需替换您的行:
Manifest.permission.ACCESS_FINE_LOCATION
这个:
android.Manifest.permission.ACCESS_FINE_LOCATION
这可以解决你的问题。
我在使用时也遇到过类似的问题;
ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED
无法解析符号
READ_CONTACTS
。
但是在使用时;
import android.Manifest;
它开始认识了
READ_CONTACT
如果您正在处理动态权限和任何权限,例如 ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION 给出错误 “无法解析方法 PERMISSION_NAME” 在这种情况下,请使用权限名称编写代码,然后 重建您的项目 这将 重新生成 清单(清单.权限)文件
new String[]{Manifest.permission.ACCESS_FINE_LOCATION}
更改为
android.manifest.permission.ACCESS_FINE_LOCATION
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
}
改变
new String[]{Manifest.permission.ACCESS_FINE_LOCATION}
对此
new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}
您的问题将会得到解决。
对于 Android 12 及更高版本...这听起来有点有趣...尝试 chatGPT 以获得您正在寻找的答案。
这是我使用的提示
向我展示如何使用 java 和 minSdkVersion 29 向 Android studio 中的 mainactivity 添加蓝牙权限
我们所有程序员的新时代!!
当您在 Manifest 上按 Alt+Enter 时,Android Studio 会建议一些导入选项。您应该选择
import android.Manifest;
而不是 import <your.package.name>.Manifest;
。
试试这个:
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;
}