Brak dostępu do kamery

0

Hej,
Mam pewien problem z dostępem do kamery na tablecie oraz na telefonie.
Pierwszy etap to jest pobranie UUID urządzenia Androidwego

public class GetNumberActivity extends AppCompatActivity {


    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
    }

    private final static String EXTRA_MESSAGE = "uuidValue";
    private static final int REQUEST_READ_PHONE_STATE = 1;
    private static int REQUEST_CODE = 1;
    private static TextView uuidTextView;


    private String uunitValue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_get_number);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        Typeface custom_fonts = Typeface.createFromAsset(getAssets(), "fonts/OpenSans-Light.ttf");

        Typeface custom_fonts2 = Typeface.createFromAsset(getAssets(), "fonts/OpenSans-Bold.ttf");

        TextView toolbarText = (TextView) findViewById(R.id.title_GetNumber);
        toolbar.setNavigationIcon(R.drawable.ic_restart);
        toolbarText.setTypeface(custom_fonts);

        TextView stageOneText = (TextView) findViewById(R.id.stageOneText);
        stageOneText.setTypeface(custom_fonts);

        TextView stageTwoText = (TextView) findViewById(R.id.stageTwoText);
        stageTwoText.setTypeface(custom_fonts);

        TextView stageThreeText = (TextView) findViewById(R.id.stageThreeText);
        stageThreeText.setTypeface(custom_fonts);

        TextView generateCard = (TextView) findViewById(R.id.textViewGenerationCard);
        generateCard.setTypeface(custom_fonts);


        uuidTextView = (TextView) findViewById(R.id.uniqueNumberTextView);
        uuidTextView.setTypeface(custom_fonts2);


        if (PackageManager.PERMISSION_GRANTED == ActivityCompat.checkSelfPermission(GetNumberActivity.this, Manifest.permission.READ_PHONE_STATE)) {

            uuidTextView.setText(deviceUDID(GetNumberActivity.this));
            uunitValue = deviceUDID(GetNumberActivity.this);

        }

        TextView nextButton = (TextView) findViewById(R.id.nextButton);
        nextButton.setTypeface(custom_fonts);
        nextButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(GetNumberActivity.this, ScanQrCodeActivity.class);
                intent.putExtra(EXTRA_MESSAGE, uunitValue);
                startActivityForResult(intent, REQUEST_CODE);
            }
        });

    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            finish();
        }
        return super.onOptionsItemSelected(item);
    }


    public String deviceUDID(Context ctx) {
        final TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
        final String tmDevice, tmSerial, androidId;
        tmDevice = "" + tm.getDeviceId();
        tmSerial = "" + tm.getSimSerialNumber();
        androidId = "" + android.provider.Settings.Secure.getString(ctx.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);

        UUID deviceUuid = new UUID(androidId.hashCode(), ((long) tmDevice.hashCode() << 32) | tmSerial.hashCode());
        String deviceId = deviceUuid.toString();
        Log.d("Device Id", deviceId);

        String newUUID = deviceId.replace("-", "");
        String code = newUUID.substring(23, 31);
        return code;
    }

Następny etap skanowanie QR Coda tu używam Google api vision

public class ScanQrCodeActivity extends AppCompatActivity {

public final static String EXTRA_MESSAGE = "hotpValume";
private static final String TAG = "Wartość błędna QR Codu";


@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}

SurfaceView cameraPreview;
private String hotpValue;
private String sms;
private String barcodeValue;
private String uuidDevice;
private TextView text;


/**
 * ATTENTION: This was auto-generated to implement the App Indexing API.
 * See https://g.co/AppIndexing/AndroidStudio for more information.
 */
private GoogleApiClient client;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_scan_qr_code);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    toolbar.setNavigationIcon(R.drawable.ic_restart);
    Typeface custom_fonts = Typeface.createFromAsset(getAssets(), "fonts/OpenSans-Regular.ttf");
    TextView title_app = (TextView) findViewById(R.id.title_application_scan);
    title_app.setTypeface(custom_fonts);

    TextView stageOneText = (TextView) findViewById(R.id.stageTwoText);
    stageOneText.setTypeface(custom_fonts);

    TextView stageTwoText = (TextView) findViewById(R.id.stageTwoText);
    stageTwoText.setTypeface(custom_fonts);

    text = (TextView) findViewById(R.id.textScan);
    text.setTypeface(custom_fonts);

    cameraPreview = (SurfaceView) findViewById(R.id.cameraPreview);
    createCameraSource();

    sms = getIntent().getStringExtra("smsCode");

    uuidDevice = getIntent().getStringExtra("uuidValue");

    client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}

private void createCameraSource() {

    final BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(this).build();
    final CameraSource cameraSource = new CameraSource.Builder(this, barcodeDetector)
            .setAutoFocusEnabled(true)
            .setRequestedPreviewSize(1600, 1200)
            .build();

    cameraPreview.getHolder().addCallback(new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {

            if (PackageManager.PERMISSION_GRANTED == ActivityCompat.checkSelfPermission(ScanQrCodeActivity.this, Manifest.permission.CAMERA)) {
                try {
                    cameraSource.start(cameraPreview.getHolder());
                } catch (IOException e) {


                    Log.w(TAG, e);
                    e.printStackTrace();
                }
            }else {
                showAlterDialog("Brak uprawnień ", "Brak uprawnień do camery. Spróbuj jeszcze raz.");
            }

        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            cameraSource.stop();
        }
    });
    barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
        @Override
        public void release() {

        }

        @Override
        public void receiveDetections(Detector.Detections<Barcode> detections) {
            final SparseArray<Barcode> barcodes = detections.getDetectedItems();
            if (barcodes.size() != 0) text.post(new Runnable() {
                @Override
                public void run() {

                    Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                    v.vibrate(500);
                    String barcodeString = barcodes.valueAt(0).displayValue;

                }
            });

        }
    });

}

Teraz sprawdziłam ze na moich telefonach Nexus 5 oraz Asus pojawia sie alter dialog Brak dostępu do Camery . Jak testuje apkę na tsblecie Samsung Tab 4 wszystko wyświetla się widok camery można skanować QR Code. Nie wiem czy źle to zaimplementowałam.

0

A nadałeś runtime permissions ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1