当前位置: 首页 > article >正文

Android手电筒、闪光灯、torch、flash

1. 仅开启手电筒

单纯的开启手电筒我们可以使用CameraManager的.setTorchMode()方法。

cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE)获取该相机特征是否可获取闪光灯。

CameraManager cameraManager= (CameraManager) getSystemService(CAMERA_SERVICE);
String cameraIdList[]=cameraManager.getCameraIdList();
String cameraId = null;
for(int i=0;i<cameraIdList.length;i++){
    CameraCharacteristics cameraCharacteristics=cameraManager.getCameraCharacteristics(cameraIdList[i]);
    //可获取闪光灯&&朝向为后置
    if(cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE)&&
                        cameraCharacteristics.get(CameraCharacteristics.LENS_FACING)==CameraCharacteristics.LENS_FACING_BACK){
        cameraId=cameraIdList[i];
        break;
    }
}
//打开手电筒
cameraManager.setTorchMode(cameraId,true);
//关闭手电筒
cameraManager.setTorchMode(cameraId,false);

2. Camer2开启闪光灯

在Camera2中,我们一般在预览的捕获请求中设置开启或关闭闪光灯,然后向捕获通道设置新的捕获请求

开启闪光灯:

captureRequestBuilder .set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH);

关闭闪光灯:

captureRequestBuilder .set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);

Button torch = findViewById(R.id.torch);
torch.setOnClickListener(new View.OnClickListener() {
    int i = 0;
    public void onClick(View view) {
        if (i == 0) {
            CaptureRequest.Builder captureRequestBuilder_preview = myCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
                            
            //设置开启闪光灯
            captureRequestBuilder_preview.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH);
                            
            captureRequestBuilder_preview.addTarget(surface_surfaceView);
            //通道设置新循环捕获请求
            myCameraCaptureSession.setRepeatingRequest(captureRequestBuilder_preview.build(),null,null);
            i=1;
        } else if (i==1) {
            CaptureRequest.Builder captureRequestBuilder_preview= myCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
                            
            //设置关闭闪光灯
            captureRequestBuilder_preview.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
                            
            captureRequestBuilder_preview.addTarget(surface_surfaceView);
            //通道设置新循环捕获请求
            myCameraCaptureSession.setRepeatingRequest(captureRequestBuilder_preview.build(),null,null);
            i=0;
        }
    }
});

3. ZXing开启手电筒

扫码时经常需要使用手电筒,但是因为ZXing已经启动了一个相机所以无法使用CameraManager来开启手电筒;并且因为没有捕获通道所以也不能使用设置捕获请求开启手电筒。

但ZXing中的DecoratedBarcodeView控件类(即com.journeyapps.barcodescanner.DecoratedBarcodeView控件)提供了启动和关闭手电筒的方法。可以在自定义的Activity中通过DecoratedBarcodeView开关手电筒。

启动手电筒:.setTorchOn()

关闭手电筒:.setTorchOff()

可以在自定义Activity的onCreate()中使用这些方法。

Button torchButton=findViewById(R.id.torchButton);
torchButton.setOnClickListener(new View.OnClickListener() {
    int i=0;
    public void onClick(View view) {
        if(i==0){
            //启动手电筒
            barcodeScannerView.setTorchOn();
            i=1;
        } else if (i==1) {
            //关闭手电筒
            barcodeScannerView.setTorchOff();
            i=0;
        }
    }
 });


http://www.kler.cn/a/148867.html

相关文章:

  • 微信小程序——01开发前的准备和开发工具
  • golang使用etcd版本问题
  • u盘加密软件有哪些?2025年必备的u盘加密神器分享(共6款!提前布局!)
  • fastadmin多个表crud连表操作步骤
  • Java算法OJ(7)随机快速排序
  • 当你想要conda安装遇到UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel的问题
  • CMake中的变量: CTest,CPack,CMake内部定义的变量
  • 封装websocket并在vuejs中调用
  • 动态库与静态库
  • Python与设计模式--设计原则
  • 九、LuaTable(表)
  • Nginx访问控制
  • 力扣142. 环形链表 II
  • 面试问题--智能指针
  • linux网络编程之UDP编程
  • 详细讲解1.js处理日期对象输出标准的“2000年12月22日 周三“ 的格式
  • 杂记 | 使用Docker安装并配置MongoDB以支持事务(单副本,并解决了证书文件错误的问题)
  • centos7.9 + gitlab12.3.0安装
  • PyQt6 QLineEdit单行文本框控件
  • 使用python提取出身份证的出生日期(18位和15位)
  • C# freesql技术 常用的增删改查sql命令
  • linux安装终端连接工具Tabby
  • DjiTello + YoloV5的无人机的抽烟检测
  • 创建Dataloader基础篇【一】
  • 拆解按摩器:有意思的按键与LED控制电路,学习借鉴一下!
  • <Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux 进程管理 9》(13)