我正在尝试在Android(2.2和2.3)中使用GPS,但在尝试使用LocationManager对象时出现以下错误:
WARN/System.err(522): java.lang.SecurityException: Provider network requires ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION permission
我在其他帖子中研究了这个问题,但这些问题通常是由于AndroidManifest.xml的问题。然而,我的似乎很好:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.thedigitalsean.examples"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".GetLocation"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permisssion.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permisssion.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permisssion.INTERNET"></uses-permission>
</manifest>
以下是GetLocation活动中我的onCreate方法中有问题的代码行,包含在try / catch块中:
LocationManager locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
final LocationListener locListener = new MyLocListener();
try{
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
}
catch (SecurityException se){
((TextView)findViewById(R.id.infobox)).setText(se.toString());
se.printStackTrace();
}
这是我编写的第一个应用程序,我需要请求Android权限,到目前为止,在获得任何权限方面都没有成功。我的清单或者我的日食配置中是否有我遗漏的东西?
答案 0 :(得分:59)
你拼错了许可
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
答案 1 :(得分:16)
我遇到了同样的问题,无法弄清楚我做错了什么。事实证明,Android Studio的自动完成功能正在将文本更改为全部大写或全部小写(取决于我是否在自动完成之前键入大写或更低级别的演员)。由于此问题,操作系统未注册名称,我将收到有关缺少权限的错误。如上所述,请确保您的权限标记正确:
<强>正确强>:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<强>不正确强>:
<uses-permission android:name="ANDROID.PERMISSION.ACCESS_FINE_LOCATION" />
<强>不正确强>:
<uses-permission android:name="android.permission.access_fine_location" />
虽然这看似微不足道,但很容易忽视。
如果有一些设置要使权限不区分大小写,请在说明中添加注释。谢谢!
答案 2 :(得分:8)
兼容所有SDK版本(android.permission.ACCESS_FINE_LOCATION
在Android M中获得dangerous
权限,并要求用户手动授予它。
在Android M ContextCompat.checkSelfPermission(...)
以下的Android版本中,如果您在true
中添加这些权限,则始终会返回AndroidManifest.xml
public void onSomeButtonClick() {
...
if (!permissionsGranted()) {
ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, 123);
} else doLocationAccessRelatedJob();
...
}
private Boolean permissionsGranted() {
return ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED);
}
@Override
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 123) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted.
doLocationAccessRelatedJob();
} else {
// User refused to grant permission. You can add AlertDialog here
Toast.makeText(this, "You didn't give permission to access device location", Toast.LENGTH_LONG).show();
startInstalledAppDetailsActivity();
}
}
}
private void startInstalledAppDetailsActivity() {
Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
AndroidManifest.xml中的:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
答案 3 :(得分:0)
只需将s从您使用ss的权限中删除,就必须使用ss