这是我的第一篇博文,希望大家喜欢和支持,看了别人很多博文以后 ,感觉那些技术大牛的博文都写的非常好,才开始决定自己也好写一写,让自己对已经掌握的东西系统的分析一遍,提高自己的表达能力。

先手先讲一下为什么要开发这个手电筒功能,因为网上很多手电筒功能 都会有自动推送消息 和自动联网的功能 ,对使用手机的消费者不好。公司才临时决定开发一个这样的功能,也是我第一个用于量产的功能。

我在做开发之前,在网上看了很多资料,下载了一些源码供自己使用。看了网上的手电筒都实现了些什么功能。然后把网上的手电筒功能反编译出来 得到要使用到的图片资源。

我在网上找资料主要是让自己知道怎么打开闪光灯功能 和 背光亮度的调节 还有怎么实现上下左右的滑动 。

最后自己选择了用发送消息打开闪关灯的办法:

通过上下滑动来控制手电筒的开和关 ,是通过实现 OnGestureListener 接口的 onScroll 方法。通过实现 OnTouchListener 接口的 onTouch 方法来建立 GestureDetector 对象同FlashLightActivity 的联系。

[html] view plaincopy
  1. package net.seete.android.FlashLight;
  2. import android.R.string;
  3. import android.app.Activity;
  4. import android.content.ContentResolver;
  5. import android.hardware.Camera;
  6. import android.hardware.Camera.Parameters;
  7. import android.os.Bundle;
  8. import android.os.Handler;
  9. import android.provider.Settings;
  10. import android.util.Log;
  11. import android.view.GestureDetector;
  12. import android.view.GestureDetector.OnGestureListener;
  13. import android.view.MotionEvent;
  14. import android.view.View;
  15. import android.view.View.OnTouchListener;
  16. import android.view.Window;
  17. import android.view.WindowManager;
  18. import android.widget.ImageView;
  19. public class FlashLightActivity extends Activity implements OnTouchListener,OnGestureListener{
  20. /** Called when the activity is first created. */
  21. private static final String TAG = "FlashLightActivity";
  22. private static final boolean DEBUG = false;
  23. private static final int MAXIMUM_BACKLIGHT = 255;
  24. private int curBrightnessValue;
  25. private GestureDetector mGestureDetector;
  26. private Camera camera;
  27. private int isOpen = 0;
  28. private String flashState = null; // 代表没有闪光灯
  29. private ImageView flashLightBG;
  30. @Override
  31. public void onCreate(Bundle savedInstanceState) {
  32. super.onCreate(savedInstanceState);
  33. if (DEBUG){
  34. Log.d(TAG,"onCreate");
  35. }
  36. camera = Camera.open();
  37. Parameters params = camera.getParameters();
  38. flashState=params.getFlashMode();
  39. if (flashState == null){
  40. getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  41. }
  42. setContentView(R.layout.main);
  43. if (DEBUG){
  44. Log.d(TAG,"onCreate="+params.getFlashMode());
  45. }
  46. if (flashState != null){
  47. mGestureDetector = new GestureDetector(this);
  48. flashLightBG = (ImageView)findViewById(R.id.background);
  49. flashLightBG.setOnTouchListener(this);
  50. flashLightBG.setLongClickable(true);
  51. }else{
  52. curBrightnessValue = getScreenBrightness(this);
  53. stopAutoBrightness(this);
  54. flashLightBG = (ImageView)findViewById(R.id.background);
  55. }
  56. }
  57. @Override
  58. public void onBackPressed() {
  59. // TODO Auto-generated method stub
  60. if (DEBUG){
  61. Log.d(TAG,"onBackPressed");
  62. }
  63. if (camera != null) {
  64. camera.release();
  65. camera = null;
  66. }
  67. super.onBackPressed();
  68. }
  69. @Override
  70. protected void onPause() {
  71. // TODO Auto-generated method stub
  72. if (DEBUG){
  73. Log.d(TAG,"onPause->curBrightnessValue="+curBrightnessValue);
  74. }
  75. if (flashState != null){
  76. flashLightBG.setImageResource(R.drawable.bg_off);
  77. }else{
  78. Log.d(TAG,"onPause->curBrightnessValue="+curBrightnessValue);
  79. mHandler.removeMessages(isOpen);
  80. setBrightness(this, curBrightnessValue);
  81. }
  82. if (camera != null) {
  83. if (isOpen==0){
  84. closeFlashLight();
  85. isOpen=0;
  86. }
  87. }
  88. super.onPause();
  89. }
  90. @Override
  91. protected void onStop() {
  92. // TODO Auto-generated method stub
  93. if (DEBUG){
  94. Log.d(TAG,"onStop");
  95. }
  96. if (camera != null) {
  97. camera.release();
  98. camera = null;
  99. }
  100. finish();
  101. super.onStop();
  102. }
  103. @Override
  104. protected void onResume() {
  105. // TODO Auto-generated method stub
  106. //flashLightBG.setImageResource(R.drawable.bg_on);
  107. if (DEBUG){
  108. Log.d(TAG,"onResume->isOpen="+isOpen);
  109. }
  110. if (flashState != null){
  111. mHandler.sendEmptyMessage(isOpen);
  112. }else{
  113. mHandler.sendEmptyMessageDelayed(isOpen, 2000);
  114. }
  115. super.onResume();
  116. }
  117. public boolean onDown(MotionEvent e) {
  118. // TODO Auto-generated method stub
  119. if (DEBUG){
  120. Log.d(TAG,"onDown");
  121. }
  122. return false;
  123. }
  124. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
  125. float velocityY) {
  126. if (DEBUG){
  127. Log.d(TAG,"onFling");
  128. }
  129. // TODO Auto-generated method stub
  130. return false;
  131. }
  132. public void onLongPress(MotionEvent e) {
  133. if (DEBUG){
  134. Log.d(TAG,"onLongPress");
  135. }
  136. // TODO Auto-generated method stub
  137. }
  138. public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
  139. float distanceY) {
  140. // TODO Auto-generated method stub
  141. if (DEBUG){
  142. Log.d(TAG,"onScroll");
  143. }
  144. float y1 = e1.getY(), y2 = e2.getY();
  145. if (y1 -y2 > 20) {
  146. if (isOpen==1) {
  147. //向上滑动发送打开闪光灯消息
  148. mHandler.sendEmptyMessage(0);
  149. }
  150. Log.d(TAG, "To UP" + "(" + y1
  151. + "," + y2 + ")");
  152. return (true);
  153. } else if (y1 - y2 < -20) {
  154. if (isOpen==0) {
  155. //向下滑动发送关闭闪光灯消息
  156. mHandler.sendEmptyMessage(1);
  157. }
  158. Log.d(TAG, "To Down" + "(" + y1
  159. + "," + y2 + ")");
  160. return (true);
  161. }
  162. return false;
  163. }
  164. public void onShowPress(MotionEvent e) {
  165. // TODO Auto-generated method stub
  166. if (DEBUG){
  167. Log.d(TAG,"onShowPress");
  168. }
  169. }
  170. public boolean onSingleTapUp(MotionEvent e) {
  171. // TODO Auto-generated method stub
  172. if (DEBUG){
  173. Log.d(TAG,"onSingleTapUp");
  174. }
  175. return false;
  176. }
  177. Handler mHandler = new Handler() {
  178. public void handleMessage(android.os.Message msg) {
  179. if (DEBUG){
  180. Log.d(TAG,"handleMessage");
  181. }
  182. switch (msg.what) {
  183. case 0:
  184. openFlashLight();
  185. isOpen = 0;
  186. break;
  187. case 1:
  188. closeFlashLight();
  189. isOpen = 1;
  190. break;
  191. }
  192. };
  193. };
  194. public void openFlashLight(){
  195. if (flashState != null){
  196. //用于显示手电筒开时的背景
  197. flashLightBG.setImageResource(R.drawable.bg_on);
  198. }else{
  199. //当没有闪光灯时,用背光做光源,并且把背光调到最亮
  200. setBrightness(this, MAXIMUM_BACKLIGHT);
  201. }
  202. Parameters params = camera.getParameters();
  203. params.setFlashMode(Parameters.FLASH_MODE_TORCH); // 持续的亮灯,FLASH_MODE_ON
  204. camera.setParameters(params);
  205. }
  206. public void closeFlashLight(){
  207. if (flashState != null){
  208. //用于显示手电筒关时的背景
  209. flashLightBG.setImageResource(R.drawable.bg_off);
  210. }
  211. Parameters params_2 = camera.getParameters();
  212. params_2.setFlashMode(Parameters.FLASH_MODE_OFF);
  213. camera.setParameters(params_2);
  214. }
  215. /**  * 设置亮度  */
  216. public static void setBrightness(Activity activity, int brightness) {
  217. // Settings.System.putInt(activity.getContentResolver(),
  218. // Settings.System.SCREEN_BRIGHTNESS_MODE,
  219. // Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
  220. WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
  221. lp.screenBrightness = Float.valueOf(brightness) * (1f / 255f);
  222. activity.getWindow().setAttributes(lp);
  223. }
  224. /**  * 停止自动亮度调节  */
  225. public static void stopAutoBrightness(Activity activity)
  226. {
  227. Settings.System.putInt(activity.getContentResolver(),
  228. Settings.System.SCREEN_BRIGHTNESS_MODE,
  229. Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
  230. }
  231. /**  * 获取屏幕的亮度  */
  232. public static int getScreenBrightness(Activity activity)
  233. {
  234. int nowBrightnessValue = 0;
  235. ContentResolver resolver = activity.getContentResolver();
  236. try {
  237. nowBrightnessValue = android.provider.Settings.System.getInt(
  238. resolver, Settings.System.SCREEN_BRIGHTNESS);     }
  239. catch (Exception e) {
  240. e.printStackTrace();
  241. }
  242. return nowBrightnessValue;
  243. }
  244. public boolean onTouch(View v, MotionEvent event) {
  245. // TODO Auto-generated method stub
  246. Log.d(TAG,"onTouch");
  247. return mGestureDetector.onTouchEvent(event);
  248. }
  249. }

把源码贴给大家看吧,有什么问题,大家就说啊 ,我也不知道怎么说。谢谢大家支持。

再给大家附上 整个源码的 网址:http://download.csdn.net/detail/azhuoazhuo/4789564 点击打开链接

android 手电筒开发相关推荐

  1. Android手电筒开发

    之前在项目中开发了一个手电筒应用,今天就拿出来给大家分享一下. 应用的架构很简单,就单纯的一个布局加一个主Activity,那么先来看一下资源图片有那些. 最后一张是桌面菜单图标,倒数第二张是透明的一 ...

  2. android 手电筒开发,Android之实现手电筒实例

    主要实现两个步骤: 1.实现打开和关闭闪光灯:而实现操作闪光灯主要通过Camera类 Camera camera = Camera.open(); Parameters mParameters = c ...

  3. android平台手电筒开发源代码

    android平台手电筒开发源代码,AndroidManifest.xml文件的入口是startapp,这个文件没上传上来,大家可以自己写. 1. [代码]android     jQuery特效 / ...

  4. 基于Android平台开发的手电筒Light

    基于Android平台开发的手电筒Light 1.     需求分析: 在现代社会中,手机的功能越来越完善,手电筒就是这些功能中必不可少的一种.当行走在漆黑的道路上,当你在黑暗狭小的地方寻找物品,当你 ...

  5. Android手电筒案例

    最近在学习Android的开发,写了个手电筒的案例,分享一下! //Activity.xml package com.fq.flashlight;import android.app.Activity ...

  6. android 手电筒服务,Android手电筒案例

    最近在学习Android的开发,写了个手电筒的案例,分享一下!//Activity.xml package com.fq.flashlight; import android.app.Activity ...

  7. Google Android SDK开发范例大全

    1. 图书信息: Google Android SDK开发范例大全(第2版)     人民邮电出版社 2010-6-1 0:00:00 余志龙;陈昱勋;郑名杰;陈小凤;郭秩均 79 元 ISBN:97 ...

  8. Android应用开发攻略

    <Android应用开发攻略> 基本信息 原书名:Android Cookbook 作者: (美)达尔文Ian F. Darwin [作译者介绍] 译者: 姚军 丛书名: O'Reilly ...

  9. Android WiFi开发教程(三)——WiFi热点数据传输

    在上一篇文章中介绍了WiFi的搜索和连接,如果你还没阅读过,建议先阅读上一篇Android WiFi开发教程(二)--WiFi的搜索和连接.本篇接着简单介绍手机上如何通过WiFi热点进行数据传输. 跟 ...

最新文章

  1. mysql 书籍推荐 简书_Mysql复习必备----50条经典Sql语句
  2. emmc linux.格式化参数,SD卡, EMMC固化 ,关于bootloader linux
  3. java调用本地shell_java通过ProcessBuilder执行本地shell命令 获取ip配置信息
  4. jdbc查看网络状态
  5. Spring SetFactoryBean实例
  6. word中格式化姓名的输出
  7. what is IOC
  8. php中的会话控制器,php – codeigniter检查每个控制器中的用户会话
  9. 了解java虚拟机---JVM的基本结构(1)
  10. 数据结构 传统链表实现与Linux内核链表
  11. Halcon入门笔记一
  12. 接死你(骚扰拦截利器) V2 登录木蚂蚁市场了!速速下载,反击骚扰!
  13. 使用minizip压缩文件
  14. Qt QList详解
  15. 微型计算机音节,二年级微机下册教案
  16. AOP机制之环绕通知的见解
  17. Swagger UI教程 API 文档神器 搭配Node使用
  18. 腾讯云服务器如何安装应用软件,腾讯云服务器Ubuntu环境下通过Apt-get安装软件...
  19. 防火墙是什么,其作用是什么?
  20. ASP.NET新闻发布网站

热门文章

  1. mysql修改字段类型语句
  2. MOS管驱动电路设计,如何让MOS管快速开启和关闭?
  3. 大学生学计算机打字速度,浅谈提高小学生计算机打字速度
  4. 计算机音乐我的天空,南征北战NZBZ《我的天空》[FLAC/MP3-320k]
  5. IIC的OLED显示程序
  6. 傅里叶变换、拉普拉斯变换的应用
  7. java 关于Scanner类中hasNextXxx()方法
  8. oracle 英文转数字,数字转换成英文
  9. java怎么快速补缺_Java基础查漏补缺(1)
  10. 微信小程序从开发到上线步骤(持续更新)