我想在每次活動進入屏幕時請求用戶的位置(我認爲我的唯一選項是活動的onResume()
方法)並且我想(也應該)支持android 6的新運行時權限模型。如何在運行時使用permissionDispatcher庫在Android 6及以上版本中請求`onResume()`權限
我使用的是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);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
}).show();
}
我能爲我的情況怎麼辦?