【问题标题】:Is there a way to use flashlight on in Android NOT using the Camera methods?有没有办法在 Android 中使用手电筒而不是使用相机方法?
【发布时间】:2016-04-05 18:54:49
【问题描述】:

请在将其标记为重复之前阅读问题。我正在尝试使用本网站其他代码中显示的相机方法访问 LED/手电筒没有。谢谢。

我正在尝试在 Android 中使用手电筒/手电筒。我已经找到并实现了可以做到这一点的代码。我遇到的问题是我正在使用将相机用作图像扫描仪的图像识别 API,并且它们没有开/关功能。当我尝试覆盖他们的方法并使用相机方法来打开/关闭手电筒时,这是可行的,但是,相机方法现在控制窗口并且它们的扫描仪不再在屏幕上具有优先权。

所以我要确定的是......是否有另一种方法可以在不使用相机方法和预览功能的情况下打开手电筒/手电筒。有人知道如何绕过相机使用手电筒/手电筒吗?任何信息将不胜感激。

这是我目前使用的代码,它正在打开/关闭手电筒,但就像我说的......这会覆盖扫描仪,我需要相机/扫描仪同时操作以识别我的图片。

公共类 Flashlight 扩展 AutoScannerSession {

Camera cam;
private CameraManager mCameraManager;
private Context context;
private Scanner scanner;
private AutoScannerSession.Listener listener;
private boolean advancedListener = false;


public Flashlight(Activity parent, Scanner scanner, Listener listener, SurfaceView preview) {
    super(parent, scanner, listener, preview);
    cam = Camera.open();
    cam.setErrorCallback(new Camera.ErrorCallback() {
        @Override
        public void onError(int error, Camera camera) {
            Log.e("erro", error +"");
        }
    });
    this.context = parent;
    this.mCameraManager = new CameraManager(parent, this, preview);
    this.scanner = scanner;
    this.listener = listener;
    if(listener instanceof AutoScannerSession.AdvancedListener) {
        this.advancedListener = true;
    }

}

@Override
public void start() {
    super.start();
    //flashOn();

}

public void flashOn() {
    android.hardware.Camera.Parameters p = cam.getParameters();
    p.setFlashMode(android.hardware.Camera.Parameters.FLASH_MODE_TORCH);
    cam.setParameters(p);
    //cam.startPreview();
}

public void flashOff() {
    cam.stopPreview();
    cam.release();
}

@Override
public void stop() {
    super.stop();
    flashOff();
}

【问题讨论】:

  • 不是重复的......完全不同的问题。我不想使用 Camera 方法,并试图确定是否有办法在不访问 Camera 方法的情况下打开/关闭 LED
  • 你为什么要尝试做一些不同于为你提供的方式的事情?
  • 再次...如果您通读该帖子,您会发现我无法执行此操作,因为图像识别软件将相机窗口用作扫描仪,并且如果我尝试实现手电筒方法,它会接管预览窗口并且图像扫描仪不起作用。手电筒工作正常,但扫描仪不能,所以它基本上会削弱应用程序。
  • 您使用什么扫描仪?是开源的吗?

标签: java android android-camera flashlight image-scanner


【解决方案1】:

不,没有其他方法可以使用 Flash。但也许您可以与扫描仪“共享”相机对象。

无论如何,Activity.onCreate() 中的 Camera.open() 和 Activity.onStart() 中打开手电筒看起来都不正确。要成为其他应用程序中的好公民,您的应用程序不应在 onResume() 之前获取相机并在 onPause() 之前释放它。

【讨论】:

  • 好的,谢谢您的回复。我正在尝试找出一种方法来覆盖图像识别 API 中的方法并合并手电筒,以便在图像识别扫描仪(使用相机)运行时打开/关闭它。也许我可以在其中一种方法中“共享”相机对象。如果 API 方法已经在访问相机,我将如何启动该过程?
【解决方案2】:

打开相机闪光灯的代码片段。

Camera cam = Camera.open();     
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();

代码 sn-p 关闭相机 LED 灯。

 cam.stopPreview();
  cam.release();

【讨论】:

  • 我已经有了这个代码...如果您阅读了这个问题,我正在尝试在不使用相机方法的情况下访问手电筒/手电筒。
【解决方案3】:

我有一部正式运行Android 4.4.2、Kernel 3.4.67、MT6582Symphony H20智能手机。将Parameters.FLASH_MODE_TORCH 设置为相机参数不起作用。尝试了几个小时后,我决定反编译其预装的 FlashLight 应用程序。在那里,我发现他们在文件/sys/class/torch/torch/torch_level 中写入1 来打开相机LED 和0 来关闭它。

然后我尝试了同样的事情,瞧!它奏效了。

但同样的技术不适用于我的 Winmax W800 PlusAndroid 4.4.2, Kernel 3.4.67, MT6572。它甚至根本没有像/sys/class/torch/torch/torch_level 这样的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多