簡體   English   中英

如何在運行時使用Android 6及更高版本中的PermissionDispatcher庫在`onResume()`中請求權限

[英]how to request for permission in `onResume()` in runtime using permissionDispatcher library in android 6 and above

每當活動進入屏幕時,我想請求用戶的位置(我認為我唯一的選擇是活動的onResume()方法),並且我想要(並且應該)支持android 6的新運行時權限模型。

我正在使用permissionDispatcher庫,它運行完美。 問題是這個問題所暗示的 ,如果我在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();
    }

我該如何處理?

除非有非常必要的許可,否則我們必須在沒有許可的情況下關閉活動,否則,建議您不要在onResume()中請求許可。

如果您拒絕許可而沒有再詢問標志設置為true,那么調用onResume()的次數就是您必須請求許可的次數。

我確實了解,如果考慮所有可能的情況,則可能希望將其放在onResume()中,但認為在某些用例中,它還會使用戶煩惱。

我建議您將請求部分放在onStart()而不是onResume()中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM