3

Google Play サービスを使用して Redlaser バーコード スキャナーを再実装しようとしています。そして、懐中電灯の問題に直面します。Android hardware.Cameraオブジェクトは、 gms.visionCameraSourceと共通して使用できません。懐中電灯と Google バーコード スキャナーを使用する機会はありますか?

4

5 に答える 5

2

現在、このコードを使用してカメラ オブジェクトを見つけています。

private boolean findCameraObject(){
    if(mCameraSource == null) {
        return false;
    }

    Field[] declaredFields = null;
    try {
        declaredFields = CameraSource.class.getDeclaredFields();
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    if(declaredFields == null) {
        return false;
    }

    for (Field field : declaredFields) {
        if (field.getType() == Camera.class) {
            field.setAccessible(true);
            try {
                Camera camera = (Camera) field.get(this.mCameraSource);
                if (camera != null) {
                    Camera.Parameters params = camera.getParameters();
                    params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
                    camera.setParameters(params);
                    setCamera(camera);
                    return true;
                }

                return false;
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            break;
        }
    }
    return false;
}
于 2015-09-22T15:20:06.983 に答える
2

私はこのコードを使用していますが、正常に機能しています または cameraSource.start(); TO setFlash ();

import java.lang.reflect.Field;
import android.hardware.Camera;

AndroidManifest を忘れないでください:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<permission android:name="android.permission.FLASHLIGHT"
    android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
    android:protectionLevel="normal"/>

次に、このメソッドを追加します

 public static Camera getCamera(CameraSource cameraSource) {
    Field[] declaredFields = CameraSource.class.getDeclaredFields();

    for (Field field : declaredFields) {
        if (field.getType() == Camera.class) {
            field.setAccessible(true);
            try {
                Camera camera = (Camera) field.get(cameraSource);
                if (camera != null) {
                    return camera;
                }

                return null;
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }

            break;
        }
    }

    return null;
}


public void setFlash () throws IOException {
   getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
    cameraSource.start(surfaceView.getHolder());
        Camera _cam = getCamera (cameraSource);
        if (_cam != null) {
            Camera.Parameters _pareMeters = _cam.getParameters();
            _pareMeters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            _cam.setParameters(_pareMeters);
            _cam.startPreview();
        }
}
于 2020-05-28T14:29:52.760 に答える