2015-12-14 51 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