有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案