Разрешения во время выполнения: QR Reader

Я работаю над приложением QR Reader, мне нужна помощь в Runtime Permission для Android M и более поздних версиях.

Проблема: я могу запросить разрешение и даже получить разрешение для камеры. Но менеджер пакетов вызывает проблемы. Я скопировал разрешение времени выполнения с какого-то веб-сайта и сократил его только для разрешений камеры.

Случай: Когда я устанавливаю приложение в первый раз и нажимаю кнопку, которая вызывает камеру (она запрашивает разрешение камеры), я даю разрешение. Далее открывается диспетчер пакетов, и я выбираю камеру своего устройства. Теперь он открывает камеру устройства. Не камера Zxing mscanner (QR Framework).

Ниже приведен мой код, уверен, что я получу некоторую помощь здесь.

Мое требование: когда я разрешаю камеру при первом запуске приложения и нажимаю кнопку "Сканировать", она должна открыться как обычный QR-сканер. Это работало нормально без прав выполнения, но сейчас - я хочу узнать больше о RTP для дальнейшего использования.

Для тестирования я использую Зефир и Нугу.

В обоих случаях я даю разрешение вручную и знаю, что мне нужно решить эту проблему, используя Разрешение времени выполнения для последних устройств / ОС. Я близок к этому, но мне нужна логическая помощь.

//QR Scanner App using Zebra Crossing Framework Sample HAve to User Run time
//Permissions for only Camera for API Level 23 and above

    import com.google.zxing.Result;
    import me.dm7.barcodescanner.zxing.ZXingScannerView;
    //Above imports
    import static android.R.attr.permission;
    import static android.media.MediaRecorder.VideoSource.CAMERA;

    public class MainActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler {
        private ZXingScannerView mScannerView;

        static final Integer CAMERA = 0x5;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);



    }


    //Nougat and Marshmallow
    //ask for permission    
    private void askForPermission(String permission, Integer requestCode) {
            if (ContextCompat.checkSelfPermission(MainActivity.this, permission) != PackageManager.PERMISSION_GRANTED) {

    //asking for permission prompt

                if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permission)) {
    //request for permissions and getting request code -- 5 for camera
                    ActivityCompat.requestPermissions(MainActivity.this, new String[]{permission}, requestCode);

                } else {
    //requesting permission
                    ActivityCompat.requestPermissions(MainActivity.this, new String[]{permission}, requestCode);
                }
            } else {
                Toast.makeText(this, "" + permission + " is already granted.", Toast.LENGTH_SHORT).show();
            }
        }
    //Response for RunTime Permissions
        @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            if(ActivityCompat.checkSelfPermission(this, permissions[0]) == PackageManager.PERMISSION_GRANTED){
                switch (requestCode) {
                    //Camera
                    case 5:
                        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                            startActivityForResult(takePictureIntent, 12);
                        }
                       // askForPermission(Manifest.permission.CAMERA,CAMERA);
                        break;

                }

                Toast.makeText(this, "Permission granted",Toast.LENGTH_SHORT).show();
            }
else
{
                Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show();
            }
        }

    //Runtime Permissions Done above

    //QR Scanner Invokation below
        public void QrScanner(View view){
            askForPermission(Manifest.permission.CAMERA,CAMERA);

            mScannerView = new ZXingScannerView(this);   // Programmatically initialize the scanner view
            setContentView(mScannerView);

            mScannerView.setResultHandler(this); for scan results.
            mScannerView.startCamera();         // Start camera

        }

    //code ends here

0 ответов

Другие вопросы по тегам