Joakim Engst..
45
您无法通过服务请求权限,因为服务不依赖于UI,这种情况很有意义.由于服务上下文不是活动,因此您获得的异常是有意义的.
您可以检查服务中是否有权限,并在活动中请求权限(是的,您需要一项活动).
在服务中:
public static boolean checkPermission(final Context context) {
return ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;
}
并在一项活动中:
private void showPermissionDialog() {
if (!LocationController.checkPermission(this)) {
ActivityCompat.requestPermissions(
this,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION},
PERMISSION_LOCATION_REQUEST_CODE);
}
}
@VitaliyA该服务可以检查权限,但不会请求它,因为它没有UI. (4认同)
如果你不能解决Manifest.permission.ACCESS_COARSE_LOCATION或精细位置使用android前缀...像这样:android.Manifest.permission.ACCESS_COARSE_LOCATION (2认同)