最近在研究开启安卓手电筒功能,总结了下Android4x、5x、6x的手电筒开启方法,写成公共方法,分享给大家。

添加摄像机和闪光灯权限

<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.autofocus" />

布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">    <Button  android:id="@+id/btn_open" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:text="打开手电筒" />    <Button  android:id="@+id/btn_close" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="关闭手电筒" /></LinearLayout>

具体实现

/** * Created by 猴子搬来的救兵Castiel * 博客地址:http://blog.csdn.net/mynameishuangshuai */public class MainActivity extends AppCompatActivity {    private CameraManager manager;// 声明CameraManager对象    private Camera m_Camera = null;// 声明Camera对象    @TargetApi(Build.VERSION_CODES.LOLLIPOP)    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button btnOpen = (Button) findViewById(R.id.btn_open);        Button btnClose = (Button) findViewById(R.id.btn_close);        manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);        try {            String[] camerList = manager.getCameraIdList();            for (String str : camerList) {            }        } catch (CameraAccessException e) {            Log.e("error", e.getMessage());        }        btnOpen.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                lightSwitch(false);            }        });        btnClose.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                lightSwitch(true);            }        });    }    /** * 手电筒控制方法 * * @param lightStatus * @return */    private void lightSwitch(final boolean lightStatus) {        if (lightStatus) { // 关闭手电筒            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {                try {                    manager.setTorchMode("0", false);                } catch (Exception e) {                    e.printStackTrace();                }            } else {                if (m_Camera != null) {                    m_Camera.stopPreview();                    m_Camera.release();                    m_Camera = null;                }            }        } else { // 打开手电筒            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {                try {                    manager.setTorchMode("0", true);                } catch (Exception e) {                    e.printStackTrace();                }            } else {                final PackageManager pm = getPackageManager();                final FeatureInfo[] features = pm.getSystemAvailableFeatures();                for (final FeatureInfo f : features) {                    if (PackageManager.FEATURE_CAMERA_FLASH.equals(f.name)) { // 判断设备是否支持闪光灯                        if (null == m_Camera) {                            m_Camera = Camera.open();                        }                        final Camera.Parameters parameters = m_Camera.getParameters();                        parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);                        m_Camera.setParameters(parameters);                        m_Camera.startPreview();                    }                }            }        }    }    /** * 判断Android系统版本是否 >= M(API23) */    private boolean isM() {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {            return true;        } else {            return false;        }    }}

更多相关文章

  1. Android(安卓)Handler的使用
  2. android的ondraw方法大全
  3. Android(安卓)两个进程之间使用AIDL
  4. Android开机自启动+屏蔽系统功能
  5. Android中自定义Adapter的基本原理
  6. Android(安卓)Service的生命周期2
  7. Android(安卓)Binder分析三:Natvie Service的获取和调用
  8. [Android] Otto源码简析
  9. android中TextView中文字体粗体的方法

随机推荐

  1. Android开机自启动后台服务-RECEIVE_BOOT
  2. Android CTS(兼容性测试)整个流程
  3. 【读书笔记】【Android(安卓)开发艺术探
  4. android EditTextDialog与软键盘适配(QVGA
  5. Eclipse导入的Android项目没有android报
  6. android每日一问【2011-8-27】
  7. 要学习的知识—做个笔记方便查找
  8. Android 数据操作之SQLiteDatabase
  9. 关于android 4.1源码调整asset相关目录的
  10. AIDL实现Android的进程通信