Почему requestCode, возвращаемый в onRequestPermissionsResult, равен 1 после того, как пользователь предоставил разрешения во время выполнения? - PullRequest
0 голосов
/ 20 мая 2018

Я должен получить разрешения Runtime от пользователей.Я передаю requestCode как 200 в ActivityCompat.requestPermissions , как вы можете видеть в коде ниже.

Но когда разрешения предоставляются пользователем, для onRequestPermissionsResult возвращается requestCode 1 .Здесь requestCode должен быть 200 , верно?

Может ли кто-нибудь объяснить, почему возвращенный requestCode 1 в onRequestPermissionsResult , а не 200 (код, который я передаю в requestPermissions) послепользователь предоставил / принял разрешения на выполнение?

        var mRuntimePermissions = RuntimePermissions(permissions, this)
        var gotPermissions = mRuntimePermissions.hasPermissions()

        if(gotPermissions == true){

            startActivity(Intent(this, MainActivity::class.java))
        }
        else{
            ActivityCompat.requestPermissions(this, permissions, 200);
        }


override fun onRequestPermissionsResult(requestCode: Int,
                 permissions: Array<String>, grantResults: IntArray) {
        when (requestCode) {

            // check requestCode and do something

            }

        }
    }

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Я не знаю, насколько это вам поможет;как это не в kotlin.Но я реализовал это во многих проектах следующим образом. Надеюсь, это поможет вам получить хоть какие-то подсказки.

Объявления класса:

private static String[] PERMISSIONS = {Manifest.permission.READ_PHONE_STATE, Manifest.permission.PROCESS_OUTGOING_CALLS};
public int ALL_PERMISSIONS = 0;
public boolean CheckNoPermission = false;

Теперь в OnCreate:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
{
    ALL_PERMISSIONS  = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE);
    ALL_PERMISSIONS  = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.PROCESS_OUTGOING_CALLS);

    // its below marshmallow
    // no need to ask permissions in this case
    // do the things here directly

    // START YOUR ACTIVITY HERE....
}
else
{
    // its marshmallow or above
    // have to ask permissions in this case

    // lets check if user already allowed the permissions in previous run

    for(int x = 0; x < PERMISSIONS.length; x++)
    {
        String ThisPermission = PERMISSIONS[x];

        if (checkSelfPermission(ThisPermission) != PackageManager.PERMISSION_GRANTED)
        {
             CheckNoPermission = true;
             break;
        }
    }

    // even if any permission is not granted then re-request all permissions; 
    // re-requesting all permissions will only request denied permissions only

    if(CheckNoPermission)
    {
          // request all permissions one by one in array

          ActivityCompat.requestPermissions(MainActivity.this, PERMISSIONS, ALL_PERMISSIONS);
    }
    else
    {
         // user has already granted all the permissions in previous run
         // do the things here directly

         // START YOUR ACTIVITY HERE....
    }


}

Теперь проверка результатов разрешений вне onCreate:

// if permissions are requested; check for user approvals :

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
{
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (grantResults.length == 2)
    {
        Boolean IsAllPermissions = true;

        // Yes need to check all permissions again as user may have denied any of the permission

        for(int p = 0; p < grantResults.length; p++)
        {
            if (grantResults[p] != PackageManager.PERMISSION_GRANTED)
            {
                IsAllPermissions = false;
                break;
            }
        }

        if(IsAllPermissions)
        {
            // user has granted all the permissions in this run
            // do the things here ...

            // START YOUR ACTIVITY HERE....
        }
        else
        {
            // user has not granted all the permissions in this run
            // so do what you want to do here in such case ...
        }
     }
     else
     {
         // missmatch in number of permissions in result
     }
 }

Документация Android по onRequestPermissionsResult Объясняется здесь ... Надеюсь, это поможет вам или кому-то еще

Сводка onRequestPermissionsResult:

  1. requestCode - этоне на что обратить внимание;для уровня приложения
  2. permissions - это массив всех разрешений, запрошенных этим запросом. Код
  3. grantResults - это массив того, что пользователь сделал с каждым запрошенным нами разрешением.с этим requestCode

requestCode нечего проверять, и он не имеет ничего общего с

0 голосов
/ 20 мая 2018

Мы можем отправить (Выполнить) кратное startActivity из activity's для результата, а в onActivityForResult метод получит несколько обратных вызовов, поэтому для идентификации обратного вызова используется запрос, который может быть идентифицирован с помощью requestCode,Непосредственно мы можем сказать requestCode как идентификатор запроса, который помогает нам обработать ответ в методе onActivityResult для конкретного запроса (staryActivityForResult).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...