Как получить доступ к камере в Android 6.0 Marshmallow?

Я новичок в Android 6.0 Кодирование Пожалуйста, предоставьте решения для кода ниже:

Когда я предоставляю разрешения времени выполнения, такие как READ_EXTERNAL_STORAGE а также WRITE_EXTERNAL_STORAGE это показывает исключение, как

java.lang.SecurityException: отказ в разрешении: начало намерения { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.motorola.camera/.Camera clip={text/uri-list U:file:///storage/emulated/0/Pictures/MyAppNew%20File%20Upload/IMG_20160401_110234.jpg} (имеет дополнительные функции) } из ProcessRecord{ed96564 26955:com.social.nocializer/u0a259} (pid=26955, uid=10259) и revok.permission.CAMERA

Или MediaStore.ACTION_IMAGE_CAPTURE а также MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE Разрешения во время выполнения не работают...

Замечания: READ_EXTERNAL_STORAGE Работает при открытии галереи

2 ответа

Решение

Для этого вы должны управлять разрешением во время выполнения, потому что все разрешения, которые вы определили в AndroidManifest, не будут предоставлены автоматически. Таким образом, как ниже метод, вы можете проверить, одобрено ли ваше разрешение или нет

if (checkSelfPermission(Manifest.permission.CAMERA)
        != PackageManager.PERMISSION_GRANTED) {

    requestPermissions(new String[]{Manifest.permission.CAMERA},
            MY_REQUEST_CODE);
}

Здесь MY_REQUEST_CODE - это статическая константа, которую вы можете определить, которая будет снова использоваться для обратного вызова диалога requestPermission. Теперь вам понадобится обратный вызов для результата диалога:

@Override
public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == MY_REQUEST__CODE) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // Now user should be able to use camera
        }
        else {
            // Your app will not have this permission. Turn off all functions 
            // that require this permission or it will force close like your 
            // original question
        }
    }
}

@Ronak Solution работал для меня, но с некоторыми изменениями, так как нам нужно проверять только те устройства, которые находятся выше Android M.

 if( ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        requestPermissions(new String[]{android.Manifest.permission.CAMERA},
                                5);
                    }
                }

И переопределить следующий метод с использованием копирования crl+o, вставка может привести к ошибке:D

 @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 5) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Now user should be able to use camera
            }
            else {
                // Your app will not have this permission. Turn off all functions
                // that require this permission or it will force close like your
                // original question
            }
    }
Другие вопросы по тегам