2015-12-14 3 views
2

Я использую ZXingScannerView в качестве читателя QR-коды в моих Fragment
Теперь у меня возникают проблемы, чтобы получить работу камеры прямо с новыми Android 6 разрешений.ZXingScannerView Android Разрешение 6 Камера

Ниже API 23 все работает нормально.

В моем методе onCreateView я проверяю разрешение камеры, и в противном случае прошу об этом. Появится диалоговое окно, и я могу предоставить разрешение.

Но предварительный просмотр камеры остается черным, пока я не изменил ориентацию своего устройства.

Вот мой код:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state){ 

    mScannerView = new ZXingScannerView(getActivity()); 

    if (ActivityCompat.checkSelfPermission(getMainActivity(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
     requestPermissions(new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST_CAMERA_SCAN_QR); 
    } else { 
     if(state != null) { 
      mFlash = state.getBoolean(FLASH_STATE, false); 
      mAutoFocus = state.getBoolean(AUTO_FOCUS_STATE, true); 
      mSelectedIndices = state.getIntegerArrayList(SELECTED_FORMATS); 
      mCameraId = state.getInt(CAMERA_ID, -1); 
     } else { 
      mFlash = false; 
      mAutoFocus = true; 
      mSelectedIndices = null; 
      mCameraId = -1; 
     } 
    } 

    return mScannerView; 
} 


@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == PERMISSION_REQUEST_CAMERA_SCAN_QR && hasPermission(grantResults)) { 
     Logger.logInfo("permission granted"); 
     mScannerView.setResultHandler(this); 
     mScannerView.startCamera(mCameraId); 
     mScannerView.setFlash(mFlash); 
     mScannerView.setAutoFocus(mAutoFocus); 
    } 
} 

private boolean hasPermission(int[] grantResults) { 
    return grantResults.length > 0 && grantResults[0] == PERMISSION_REQUEST_CAMERA_SCAN_QR; 
} 


@Override 
public void onResume() { 
    super.onResume(); 
    mScannerView.setResultHandler(this); 
    mScannerView.startCamera(mCameraId); 
    mScannerView.setFlash(mFlash); 
    mScannerView.setAutoFocus(mAutoFocus); 

} 

ответ

2

Я думаю, что вы должны спросить разрешения, прежде чем инициализировать ZXingScannerView. Тем не менее я бы посоветовал позволить родительской деятельности запрашивать разрешения. Таким образом, вы просто запускаете ScanSomethingActivity, когда имеете правильное разрешение.

Кроме того эта библиотека может сделать вашу жизнь проще с разрешения:

https://github.com/googlesamples/easypermissions

+0

очень полезно, спасибо – AsyncTask

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