Android实战简易教程-第五十七枪(分享小米手电筒源码)
16lz
2021-01-24
手电筒功能实现简单很实用,下面我们就来研究一下如何自制一款手电筒小程序,初学者可以通过实例了解原理,提高学习android技术的热情和动力。
首先我们了解一下手电筒要调用哪些android权限:
上面三个是摄像头权限,下面两个是闪光灯权限,在本实例中都要配置一下。 下面看一下MainActivity.java:
package com.zxx1.light;import android.app.Activity;import android.hardware.Camera;import android.hardware.Camera.Parameters;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.WindowManager;import android.widget.Button;import android.widget.Toast;public class LightActivity extends Activity {private Button lightBtn = null;private Camera camera = null;private Parameters parameters = null;public static boolean isLight = true; // 定义开关状态,状态为false,打开状态,状态为true,关闭状态private int back = 0;// @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 全屏设置,隐藏窗口所有装饰getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置屏幕显示无标题,必须启动就要设置好,否则不能再次被设置getWindow().setFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD,WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//保持屏幕常亮setContentView(R.layout.main);lightBtn = (Button) findViewById(R.id.btn_light);lightBtn.setOnClickListener(new OnClickListenerImpl());}class OnClickListenerImpl implements OnClickListener {@Overridepublic void onClick(View v) {if (isLight) {lightBtn.setBackgroundResource(R.drawable.shou_on);// 设置不同图片camera = Camera.open();// 打开闪光灯parameters = camera.getParameters();parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);// 开启camera.setParameters(parameters);camera.startPreview();// 开启isLight = false;} else {lightBtn.setBackgroundResource(R.drawable.shou_off);parameters.setFlashMode(Parameters.FLASH_MODE_OFF);// 关闭camera.setParameters(parameters);camera.stopPreview();isLight = true;camera.release();}}}@Overrideprotected void onDestroy() {camera.release();super.onDestroy();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {back++;switch (back) {case 1:Toast.makeText(LightActivity.this, getString(R.string.again_exit), Toast.LENGTH_SHORT).show();break;case 2:back = 0;DulBack();break;}return true;} else {return super.onKeyDown(keyCode, event);}}public void DulBack() { // 关闭程序if (isLight) {// 开关关闭时LightActivity.this.finish();android.os.Process.killProcess(android.os.Process.myPid());// 关闭进程} else if (!isLight) {// 开关打开时camera.release();LightActivity.this.finish();android.os.Process.killProcess(android.os.Process.myPid());// 关闭进程isLight = true;// 避免,打开开关后退出程序,再次进入不打开开关直接退出时,程序错误}}}
布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
最后别忘了配置权限,最后运行实例如下:
喜欢的朋友关注我吧!谢谢。
更多相关文章
- Android(安卓)判断网络状态,并且在没有网络的时候,打开网络设置对
- 最佳实践-android程序安全
- Android(安卓)拍照:如何使用已有相机应用捕获图片(Taking Photos S
- Xposed 实现给Hook的APP动态添加权限Permission
- android第三天课程 activity生命周期
- 删除Android固件自带软件
- 做好准备,让你的短信应用迎接Android(安卓)4.4(KitKat)
- Activity生命机制与状态保存机制
- Android权限获取机制与常见权限不足问题分析