Как получить разрешение для камеры в android. (В частности, Marshmallow)

Эй, я разрабатываю приложение в студии Android. В котором требуется разрешение камеры. Я включил <uses-permission android:name="android.permission.CAMERA" /> в файл AndroidManifest.xml. Он работает правильно во всех версиях Android, кроме Marshmallow. Как получить разрешение камеры по умолчанию? Если не возможно, как я могу попросить его у пользователя?

Ответ 1

Сначала проверьте, предоставил ли пользователь разрешение:

if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
    == PackageManager.PERMISSION_DENIED)

Затем вы можете использовать это для запроса пользователю:

ActivityCompat.requestPermissions(activity, new String[] {Manifest.permission.CAMERA}, requestCode);

И в Marshmallow он появится в диалоговом окне

Ответ 2

Вы можете попробовать следующий код для запроса разрешения камеры в зефире. Сначала проверьте, дает ли пользователь разрешение. Если пользователь не предоставил разрешение, запросите разрешение камеры:

private static final int MY_CAMERA_REQUEST_CODE = 100;

if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
    requestPermissions(new String[]{Manifest.permission.CAMERA}, MY_CAMERA_REQUEST_CODE);
}

После запроса разрешения появится диалоговое окно с запросом разрешения, содержащего опции allow и deny. После нажатия на действие мы можем получить результат запроса следующим способом:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == MY_CAMERA_REQUEST_CODE) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show();
        }
    }
}

Ответ 3

RxPermission - лучшая библиотека, которая сделала строку кода 1.

Для разрешения камеры это обходное решение.

1) Сначала добавьте это разрешение в свой manifest.xml. manifest.xml.

<uses-permission android:name="android.permission.CAMERA" />

2) Затем спросите разрешение времени выполнения.

 new RxPermissions(this)
.request(Manifest.permission.CAMERA) // ask single or multiple permission once
.subscribe(granted -> {
    if (granted) {
       // All requested permissions are granted
    } else {
       // At least one permission is denied
    }
});

добавьте эту библиотеку в свой build.gradle

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.tbruyelle:rxpermissions:0.10.1'
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
}

Разве это не так просто?

Ответ 4

check using this
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)
            == PackageManager.PERMISSION_DENIED)

и

Ответ 5

Это работает для меня, источник здесь

int MY_PERMISSIONS_REQUEST_CAMERA=0;
// Here, this is the current activity
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
{
     if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA))
     {

     }
     else
     {
          ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA );
          // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
          // app-defined int constant. The callback method gets the
          // result of the request.
      }
}