簡體   English   中英

我的應用程序第一次不詢問棉花糖的運行時權限嗎?

[英]My app Does not ask at the first time for the runtime permission for the marshmallow?

我為送餐制作了一個應用程序。 在我的應用程序中,當用戶使用Android手機版本的棉花糖時,我的應用程序不會在第一時間要求讀取短信的許可。 但是當用戶下次打開應用程序時,我的應用程序會請求許可。 我不知道是什么問題。 我希望當用戶第一次打開應用程序時,應該詢問權限,而不是第二次。

這是我請求權限的方法,我在Activity的onCreate()方法中調用此方法:

 private void permissionForMarshMallow() {

        int permissionCheck = ContextCompat.checkSelfPermission(LoginActivity.this,
                Manifest.permission.READ_SMS);

        if (ContextCompat.checkSelfPermission(LoginActivity.this,
                Manifest.permission.READ_SMS)
                != PackageManager.PERMISSION_GRANTED) {


            if (ActivityCompat.shouldShowRequestPermissionRationale(LoginActivity.this,
                    Manifest.permission.READ_SMS)) {

                Log.e("permission...granted", "permission granted............");


            } else {



                ActivityCompat.requestPermissions(LoginActivity.this,
                        new String[]{Manifest.permission.READ_SMS},
                        REQUEST_CODE_ASK_SINGLE_PERMISSION);


            }
        }
    } 

這是重寫方法onRequestPermissionsResult()

 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {


        switch (requestCode) {

            case REQUEST_CODE_ASK_SINGLE_PERMISSION:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                } else {


                    // Toast.makeText(LoginActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }


    }

誰能告訴我如何使應用程序在第一次而不是第二次請求許可?

您的代碼中存在邏輯缺陷。 這是您的代碼運行方式:

  1. 檢查我們是否有權限。
  2. 如果我們沒有許可:
    • 我們應該征求許可嗎?
      • 如果是,則記錄“已授予權限”
      • 如果沒有,則請求權限

因此,基本上,您是在不需要的時候請求許可。 在您應該請求許可的情況下,只需記錄“已授予許可”,而不是請求許可。 您只需要稍微更改一下代碼即可:

 private void permissionForMarshmallow() {

        int permissionCheck = ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.READ_SMS);

        if (ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(LoginActivity.this, new String[]{Manifest.permission.READ_SMS}, REQUEST_CODE_ASK_SINGLE_PERMISSION);

        }
        else {
            // user probably checked "never ask again" - we should not ask for permission.
        }
    }
} 

看起來像第一次啟動時,ShowShowRequestPermissionRationale為true,您只需創建一個日志條目。 您已將其寫入日志中,但在這種情況下,尚未授予該權限。

暫無
暫無

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

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