2022-04-08 Android app小电筒(闪光灯)Torch 测试demo,获取手电筒状态。

一、直接上测试代码吧

package com.giada.flickerled;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.os.Build;
import android.os.Bundle;

import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class MainActivity extends AppCompatActivity {
    protected boolean isopent = false;
    private CameraManager manager;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
        Button open = (Button) findViewById(R.id.open);
        open.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!isopent)
                {
                    try {
                    manager.setTorchMode("0", true);
                } catch (CameraAccessException e) {
                    e.printStackTrace();
                }
                    isopent=true;
                }
                else
                {
                    try {
                        manager.setTorchMode("0", false);
                    } catch (CameraAccessException e) {
                        e.printStackTrace();
                    }
                    isopent=false;
                }
            }
        });
    }

}
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.CAMERA"/>

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-feature android:name="android.hardware.camera.flash" />

二、在android 11 和android 8 真机上测试ok,点击按钮开关闪光灯。

三、另外一种形式,获取手电筒的开关状态,循环开关。获取手电筒状态的通过回调方法:mTorchCallback,一进入app就回有一个回调返回现在手电筒的状态。

package com.giada.flickerled;

import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.os.Build;
import android.os.Bundle;

import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import static android.hardware.Camera.Parameters.FLASH_MODE_ON;


public class MainActivity extends AppCompatActivity {
    protected boolean isFlashLightOn = false;
    private CameraManager mCameraManager;
    public  String TAG = "GIADATORCH";

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取CameraManager
        if(mCameraManager == null){
            mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
        }
        mCameraManager.registerTorchCallback(mTorchCallback, null);
        Button open = (Button) findViewById(R.id.open);
        open.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                toggleLight(!isFlashLightOn);
            }
        });
    }
    //callback成员变量初始化
    private CameraManager.TorchCallback mTorchCallback = new CameraManager.TorchCallback() {
        @Override
        public void onTorchModeChanged(@NonNull String cameraId, boolean enabled) {
            super.onTorchModeChanged(cameraId, enabled);
            isFlashLightOn = enabled;
            Log.d(TAG, "onTorchModeChanged cameraId=" + cameraId + ";enabled=" + enabled);
        }
    };
    public void toggleLight(boolean OPEN) {
        try {
            //获取当前手机所有摄像头设备ID
            String[] ids = mCameraManager.getCameraIdList();
            for (String id : ids) {
                CameraCharacteristics c = mCameraManager.getCameraCharacteristics(id);
                //查询该摄像头组件是否包含闪光灯
                Boolean flashAvailable = c.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);

                /*
                 * 获取相机面对的方向
                 * CameraCharacteristics.LENS_FACING_FRONT 前置摄像头
                 * CameraCharacteristics.LENS_FACING_BACK 后只摄像头
                 * CameraCharacteristics.LENS_FACING_EXTERNAL 外部的摄像头
                 */
                Integer lensFacing = c.get(CameraCharacteristics.LENS_FACING);
                if (flashAvailable != null && flashAvailable
                        && lensFacing != null && lensFacing == CameraCharacteristics.LENS_FACING_BACK) {
                    //打开或关闭手电筒
                    mCameraManager.setTorchMode(id, OPEN);
                    break;
                }
            }
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }

}

四、参考文章

Android小应用-手电筒的实现 - 简书

https://www.jb51.net/article/143183.htm

android 9.0 获取手电筒状态以及打开/关闭手电筒 - 简书

猜你喜欢

转载自blog.csdn.net/qq_37858386/article/details/124037986