我收到此错误:
java.lang.RuntimeException: Unable to create application com.android.tools.fd.runtime.BootstrapApplication: java.lang.SecurityException: "gps" location provider requires ACCESS_FINE_LOCATION permission.
在我的Android代码中,尽管有:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
这是导致错误的代码。它被包装以检查权限,但if中的第一行仍会导致该错误。
LocationManager mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 60 * 1000, 1, mLocationListener);
}
我之前也定义了LocationListener
onLocationChanged
事件。
我是否需要添加其他任何内容来修复此异常?
答案 0 :(得分:0)
LocationManager mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 60 * 1000, 1, mLocationListener);
}
如果未授予权限,则需要requestPermission
答案 1 :(得分:0)
您应该在运行时为运行Android 6.0及更高版本的设备请求权限。以下是样本
private String locationPermission = Manifest.permission.ACCESS_FINE_LOCATION;
if (ActivityCompat.checkSelfPermission(MainActivity.this, locationPermission)
== PackageManager.PERMISSION_GRANTED) {
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 60 * 1000, 1, mLocationListener);
} else {
ActivityCompat.requestPermissions(MainActivity.this,
new String[] { locationPermission }, PR_LOCATION_REQUEST);
}
并处理权限授予结果
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode != PR_LOCATION_REQUEST) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
return;
}
if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 60 * 1000, 1, mLocationListener);
return;
}
}
有关详细信息https://developer.android.com/training/permissions/requesting.html
,请参阅此处