#java #android #android-studio #android-fragments
#java #Android #android-studio #android-фрагменты
Вопрос:
Я пытаюсь создать сканер QR-кода во фрагменте, но камера не отображается в surfaceview и просто становится черной.
вот мой класс Java:
public class ScanFragment extends Fragment {
SurfaceView surfaceView;
CameraSource cameraSource;
TextView textView;
BarcodeDetector barcodeDetector;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_scan, container, false);
surfaceView = (SurfaceView) view.findViewById(R.id.cameraPreview);
textView = (TextView) view.findViewById(R.id.scanText);
barcodeDetector = new BarcodeDetector.Builder(view.getContext().getApplicationContext())
.setBarcodeFormats(Barcode.QR_CODE).build();
cameraSource = new CameraSource.Builder(view.getContext().getApplicationContext(), barcodeDetector)
.setRequestedPreviewSize(640, 480).build();
surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (ActivityCompat.checkSelfPermission(getContext().getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
return;
}
try {
cameraSource.start(holder);
}catch (IOException e){
e.printStackTrace();
}
}
@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> qrCodes = detections.getDetectedItems();
if(qrCodes.size() != 0){
textView.post(new Runnable() {
@Override
public void run() {
Vibrator vibrator = (Vibrator) getContext().getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(1000);
textView.setText(qrCodes.valueAt(0).displayValue);
}
});
}
}
});
return view;
}
}
Я предоставил разрешения на использование из файла манифеста Android. легко компилируется в Android Studio, но когда я запускаю ее на телефоне, камера просто становится черной, и от этого нет сбоев.
Кто-нибудь знает, как это исправить?
Ответ №1:
С Android 6.0(API 23) при включении вам необходимо запросить у пользователей разрешение на выполнение. Вот почему ваша камера ничего не показывает. Разрешение определено только в AndroidManifest, но пользователь не согласился разрешить вашему приложению использовать камеру. Здесь приведен хороший пример того, как запрашивать разрешения среды выполнения.
Если вы хотите прочитать больше об этом, документация также доступна на Android developer: