2016-05-25 3 views
0

Я разрабатываю приложение для Android, я должен разрешить пользователям использовать камеру для сканирования QRCode.Как я могу запросить разрешение во время выполнения на Android?

В каждой версии Android (кроме> 6.0) у меня нет проблем, но в зефире я должен разрешить вручную разрешение «Настройки -> Приложение -> Разрешение» (это странно, потому что я объявил разрешение камеры в манифест).

Я прочитал документацию DEV-андроида сайт, но я не понимаю некоторые вещи:

if (ContextCompat.checkSelfPermission(thisActivity, 
       Manifest.permission.READ_CONTACTS) 
     != PackageManager.PERMISSION_GRANTED) { 

    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
      Manifest.permission.READ_CONTACTS)) { 

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

    } 
} 

Вторая часть кода:

@Override 
public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // permission was granted, yay! Do the 
       // contacts-related task you need to do. 

      } else { 

       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
      } 
      return; 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 

Как я могу адаптировать этот код к моей проблеме ?

Что такое "MY_PERMISSIONS_REQUEST_READ_CONTACTS"?

ответ

4

MY_PERMISSIONS_REQUEST_READ_CONTACTS - это статическая переменная int, которую вы должны установить в своей деятельности. Это код запроса, который используется в onRequestPermissionsResult. Это необходимо, чтобы вы знали, какое разрешение было принято (принимается или отклонено) в onRequestPermissionsResult.

В верхней части деятельности просто положить private static final int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 1; (число может быть все, что вы хотите)

+0

статическая переменная с именем, которое я могу изменить, это не «специальный» вар, верно? –

+0

@Max Я не знаком с «специальным» var. Статическая переменная - это класс, который принадлежит классу, для которого не требуется использовать экземпляр объекта (например, переменную экземпляра). См. Мое редактирование о том, как его использовать. –

1

Попробуйте этот простой код для спрашивать разрешения пользователя во время выполнения.

Шаг 1: Объявить эту переменную

private int STORAGE_PERMISSION_CODE=23 

Шаг 2: Вставьте этот код в функции OnCreate(), это вызовет диалоговое окно, как только деятельность называется с просьбой предоставить доступ к «Read наружно Хранение "в этом случае.

ActivityCompat.requestPermissions(this,new String[{Manifest.permission.READ_EXTERNAL_STORAGE},STORAGE_PERMISSION_CODE); 

Вы можете изменить параметр «READ_EXTERNAL_STORAGE» в соответствии с вашими требованиями.

Для полной демонстрации «Права доступа Android Зефир» проверить эту ссылку: https://www.simplifiedcoding.net/android-marshmallow-permissions-example/

+0

Это замечательно, но вам не хватает закрывающей скобки после String [. –

Смежные вопросы