手电筒功能实现简单很实用,下面我们就来研究一下如何自制一款手电筒小程序,初学者可以通过实例了解原理,提高学习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"?>    

最后别忘了配置权限,最后运行实例如下:


喜欢的朋友关注我吧!谢谢。


更多相关文章

  1. Android(安卓)判断网络状态,并且在没有网络的时候,打开网络设置对
  2. 最佳实践-android程序安全
  3. Android(安卓)拍照:如何使用已有相机应用捕获图片(Taking Photos S
  4. Xposed 实现给Hook的APP动态添加权限Permission
  5. android第三天课程 activity生命周期
  6. 删除Android固件自带软件
  7. 做好准备,让你的短信应用迎接Android(安卓)4.4(KitKat)
  8. Activity生命机制与状态保存机制
  9. Android权限获取机制与常见权限不足问题分析

随机推荐

  1. Android(安卓)shape的使用
  2. Android(安卓)layout xml总结(2)
  3. android WebView总结
  4. android 2D教程精华集合贴
  5. Android(安卓)体系结构介绍
  6. 【转】每个Android开发者都应该了解的资
  7. Android---Menu
  8. Android(安卓)之 shape和selector用法介
  9. android设置全屏以及解决设置全屏无效的
  10. Android---进程间通机制的简单理解