Android 闪光灯类

2019年开发Android APP(API Level 28)时写的工具类,整理出来做参考用

作用:使用闪光灯功能;没有该功能则通过手电筒实现不停闪烁的闪光灯功能
package com.soft.zb.accidentwarning.utils;

import android.annotation.TargetApi;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.os.Build;
import android.os.CountDownTimer;

import android.util.Log;
import android.widget.Toast;

import java.util.Timer;
import java.util.TimerTask;


/*
 * <!-- 闪光灯权限 -->
 * <uses-permission android:name="android.permission.FLASHLIGHT" />
 * <!-- 部分手机、android6.0 以上需要摄像头权限 -->
 * <uses-permission android:name="android.permission.CAMERA" />
 */
public class FlashlightUtil {


     // 判断设备是否能使用闪光灯
    public boolean hasFlashlight(Context context) {

        return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
    }


    // Android 6.0	API23	VERSION_CODES:M
    private boolean isNewVersion() {

        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
    }

    
    private Camera camera;
    private CameraManager cameraManager;

    // 手电筒是否关闭
    public boolean isOff(){
        
        if(isNewVersion()) { 
            return cameraManager == null;
            
        }else
            return camera == null;
    }


    /**
     * 打开手电筒
     **/
    public void lightsOn(Context context) {

        if(!isSosMode()) {
            sosOff();
        }
        
        if(hasFlashlight(context)) {
            if(isNewVersion()) {
                linghtOnNew(context);
                
            } else {
                linghtOnOld();
            }
        }else {
            Toast.makeText(context,"该手机不支持开启闪光灯", Toast.LENGTH_SHORT).show();
        }
    }


     // 安卓6.0以上打开手电筒
    @TargetApi(Build.VERSION_CODES.M)
    private void linghtOnNew(Context context) {
        try {
            cameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
            cameraManager.setTorchMode("0", true); // 0 -> 主闪光灯

        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }


     // android6.0以下打开手电筒
    private void linghtOnOld() {
        if (camera == null) {
            camera = Camera.open();
            Camera.Parameters params = camera.getParameters();
            params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            camera.setParameters(params);
        }
    }

    /**
     * 关闭手电筒
     * */
    public void lightsOff() {

        if (isNewVersion()) {
            lightsOfNew();

        } else {
            lightsOfOld();
        }
    }

    // 安卓6.0以上打关闭手电筒
    @TargetApi(Build.VERSION_CODES.M)
    private void lightsOfNew() {
        try {
            if (cameraManager == null) {
                return;
            }
            cameraManager.setTorchMode("0", false);
            cameraManager = null;
        } catch (Exception e) {
        }
    }


    // 安卓6.0以下关闭手电筒
    private void lightsOfOld() {
        if (camera != null) {
            Camera.Parameters params = camera.getParameters();
            params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            camera.setParameters(params);
            camera.release();
            camera = null;
        }
    }
    


    /**
     * SOS闪光灯
     * */

    private boolean isSos = false;

    // 关闭SOS
    public void sosOff() {
        isSos = false;

        lightsOff();
    }


    public boolean isSosMode() {
        return isSos;
    }


    public void sosOn(final Context context){
        isSos = true;

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (isSosMode()) {
                    lightsOn(context);
                    try {
                        Thread.sleep(300);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    testLog("light:", "isSos : " + isSos);

                    lightsOff();
                    try {
                        Thread.sleep(300);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    testLog("light:", "isSos : " + isSos);
                }

                testLog("light:","Thread isSos : " + isSos);

            }
        }).start();
    }


    private void testLog(String tag, String msg){
        Log.i(tag, msg);
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值