android 手电筒开发

来源:互联网 发布:手机淘宝免费开店流程 编辑:程序博客网 时间:2024/05/16 09:57
这是我的第一篇博文,希望大家喜欢和支持,看了别人很多博文以后 ,感觉那些技术大牛的博文都写的非常好,才开始决定自己也好写一写,让自己对已经掌握的东西系统的分析一遍,提高自己的表达能力。

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

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

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

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

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

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


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

0 0