2017-01-30 6 views
0

Сообщение api 23 нам нужно динамически проверить разрешение. в соответствии с моим пониманием поток должен быть таким, как этоКак этот код работает для проверки разрешений?

1. является разрешением, предоставленным пользователем? Если нет -> мы можем либо показать диалоговое окно запроса, либо не следует (из-за его выбора в прошлом «не сеять снова».

если да -> выполняют функции, для которых требовалось разрешение

Теперь код в соответствии с Документами Google является:..

// Here, thisActivity is the current activity 
if (ContextCompat.checkSelfPermission(thisActivity, 
       Manifest.permission.READ_CONTACTS) 
     != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
      Manifest.permission.READ_CONTACTS)) { 

     // Show an explanation to the user *asynchronously* -- don't block 
     // this thread waiting for the user's response! After the user 
     // sees the explanation, try again to request the permission. 

    } else { 

     // No explanation needed, we can request the permission. 

     ActivityCompat.requestPermissions(thisActivity, 
       new String[]{Manifest.permission.READ_CONTACTS}, 
       MY_PERMISSIONS_REQUEST_READ_CONTACTS); 

     // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
     // app-defined int constant. The callback method gets the 
     // result of the request. 
    } 
} 

shouldShowRequestPermissionRationale() этот метод возвращает истину, если приложение запросило это разрешение ранее, и пользователь отклонил запрос. Примечание: если пользователь tur в прошлом отказал запрос на разрешение и выбрал опцию «Не спрашивать снова» в диалоговом окне системы запроса разрешения, этот метод возвращает false. Метод также возвращает false, если политика устройства запрещает приложению иметь такое разрешение.

Теперь, согласно мне, должно быть "!" оператора во втором выражении if. Пожалуйста, скажите мне, где я ошибаюсь?

+0

Что вы думаете об этом? –

+0

@Adan_SL вопрос в том, должен ли быть «!» оператор во втором утверждении if? – rajat44

ответ

0

Я не думаю, что есть использование! оператора во втором выражении if. Это условие возвращает true, если у вас есть разрешение. Функции, которые вы хотите выполнить с этим разрешением, должны быть записаны внутри этого оператора if. Случай else выполняется, если if возвращает false, что произойдет, когда пользователь откажет в разрешении или пользователь выбрал опцию «Не спрашивать снова» в прошлом.

-1

shouldShowRequestPermissionRationale метод там, чтобы увидеть, если пользователь проверил Не спрашивайте снова ранее. Если он возвращает истину, что просто означает, что пользователь не попал в Не спрашивайте снова флажка еще, вместо этого он/она просто ударила Запретить и пропустить выдачу разрешения вы просили в последний раз.

Теперь, если вы проверить то же самое разрешение еще раз, вы должны принять это во внимание, что пользователь может проверил не спрашивать в последний раз. Предположим, его использовали, отметив его так, чтобы вызвать shouldShowRequestPermissionRationale, а затем вернет false. Это означает, что вы не должны снова запрашивать это разрешение.

Итак, не должно быть! оператор.

+0

Объяснение, которое вы дали, полностью в порядке. Но давайте предположим, что пользователь проверил флажок «DAA» в последний раз, поэтому 'shouldShowRequestPermissionRationale' вернет false. Оператор «ELSE» будет выполнен вместо «IF». – rajat44

+0

Вы всегда должны запрашивать разрешение, требуемое вашему приложению, поскольку вы можете разрешать статус указанного разрешения в onPermissionRequestResult и там вы можете использовать shouldShowRequestPermissionRationale для выполнения соответствующего действия (либо показать обоснование, либо просто пропустить без пауз). – arcone1