0

Я изучаю, как запрашивать разрешения. теперь я хочу использовать аппаратное обеспечение Camera, и я пытаюсь запросить это разрешение. Я упомянул официальный сайт разработчиков Android, и я использовал пример, размещенный на веб-сайте, но я немного изменил его, так как мне нужно запросить аппаратные средства Android Camera.Разрешение не запрашивается

файл манифеста не содержит каких-либо разрешений, и я ожидаю, когда я запустил приведенный ниже код, «Toast» появится, поскольку в файле манифеста не будет разрешений. но произошло то, что, когда я запускаю приложение, он не запрашивает для добавления каких-либо разрешений или появляется сообщение «Toast».

пожалуйста, объясните мне, почему это happeneing и как установить его прямо

код:

int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA); 
if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 

    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { 
     Toast.makeText(this, "permission is not in the manifest file", Toast.LENGTH_SHORT).show(); 
    } 

} else { 
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); 
} 

ответ

0

Открыть диалог, используя код ниже:

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

Получить Результат деятельности, как указано ниже:

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case 1: { 

      // 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. 
       Toast.makeText(MainActivity.this, "Permission denied to read your External storage", Toast.LENGTH_SHORT).show(); 
      } 
      return; 
     } 

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

Подробнее: https://developer.android.com/training/permissions/requesting.html

0

Вы пытаетесь просить разрешения в части еще ... то есть когда разрешение уже само собой разумеющееся.

Внешний еще означает, что разрешение дано .... сделайте следующее вместо

int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA); 
if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 

    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { 
     Toast.makeText(this, "permission is not in the manifest file", Toast.LENGTH_SHORT).show(); 
    } else{ 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); 
    } 

} else { 
    Toast.makeText(this, "permission is granted already", Toast.LENGTH_SHORT).show(); 
} 
+0

следовать ответ на @Amit Desale для проверки результатов при работе с несколькими разрешениями – Kushan

0
if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 
// here you need to request permission, or show explanation if needed 
} else { 
//we already have permission, no need to request 
} 

поэтому правильный код будет выглядеть следующим образом:

int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA); 
if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 

    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { 
     Toast.makeText(this, "permission is not in the manifest file", Toast.LENGTH_SHORT).show(); 
    } else { 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); 
    } 
} 
+0

благодаря ..но почему нет, если-заявление shouldShowRequestPermissionRationale не выполняется ?? или, другими словами, когда он будет выполнен – user2121

+0

, он не будет выполняться, если разрешение либо будет отклонено, либо пользователь не будет отображать эту кнопку снова, либо кто-то перешел к настройкам и удалил разрешение. Выполняется только в том случае, если разрешение отклонено, и ни одно из указанных выше недействительно. – Kushan

0

ли вы работать приложение в устройстве android m?

Права доступа задаются только в андроида зефира устройства для получения дополнительной информации, пожалуйста, относятся here

Для других андроид устройств, работающих в нижней версии другой, что Зефир и нужно объявить разрешения на андроид manefest ...

Обратите внимание, что диалоговое окно разрешения не отображается в устройствах Android, работающих на более низкой версии, чем у android-m

+0

да. я использую android M – user2121

0

Вы должны иметь эти права должны быть перечислены в AndroidManifest.xml, даже если вы пытаетесь реализовать исполнительную модель разрешения для Android M.

if(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)==PackageManager.PERMISSION_GRANTED){ 
     //do something 
    } 
    else 
     requestPermissions(permissionsList, 
       MY_PERMISSIONS_REQUEST_CODE); 

Тогда после действия пользователя:

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_CODE: 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       //do something 
      } else{ 
       //do some other thing 
      } 
      break; 

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