java如何在运行时使用安卓 6及更高版本中的permissionDispatcher库在“onResume()”中请求权限
我想在每次活动进入屏幕时请求用户的位置(我认为我唯一的选择是活动的onResume()
方法),我想(也应该)支持安卓 6的新运行时权限模型
我正在使用permissionDispatcher库,它工作得非常好。问题是this issue suggests,如果我在onResume()
方法中调用一个请求权限的函数,而用户拒绝该权限,它将陷入无限循环
但我的问题是,因为我想在活动的每个外观上获取用户的位置,所以除了使用onResume()
方法之外,我想不出其他方法(因此,如果用户拒绝许可,就会陷入无限循环)
以下是我的代码示例:
@NeedsPermission(Manifest.permission.ACCESS_FINE_LOCATION)
void startLocationUpdate() {
mLocationLoadingDialog.show();
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
}
@OnShowRationale(Manifest.permission.ACCESS_FINE_LOCATION)
void showRationalForFineLocation(final PermissionRequest request) {
new AlertDialog.Builder(this)
.setMessage("this app needs your permission to get your location")
.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
request.proceed();
}
})
.setNegativeButton("no way", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
request.cancel();
exitApp();
}
})
.setCancelable(false)
.show();
}
@OnPermissionDenied(Manifest.permission.ACCESS_FINE_LOCATION)
void showDeniedForFINELOCATION() {
exitApp();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
RequestSelectorActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}
private void exitApp() {
new AlertDialog.Builder(this)
.setCancelable(false)
.setMessage("you didn't allow us to know where you are, so the application will exit")
.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
moveTaskToBack(true);
安卓.os.Process.killProcess(安卓.os.Process.myPid());
System.exit(1);
}
}).show();
}
我能为我的处境做些什么
共 (0) 个答案