手电筒功能实现简单很实用,下面我们就来研究一下如何自制一款手电筒小程序,初学者可以通过实例了解原理,提高学习android技术的热情和动力。

首先我们了解一下手电筒要调用哪些android权限:

[html]  view plain copy
  1.   
  2.   <uses-permission android:name="android.permission.CAMERA" />  
  3.   <uses-feature android:name="android.hardware.camera" />  
  4.   <uses-feature android:name="android.hardware.autofocus" />  
  5.     
  6.   <uses-permission android:name="android.permission.FLASHLIGHT" />  
  7.   <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />  
  8.     
上面三个是摄像头权限,下面两个是闪光灯权限,在本实例中都要配置一下。

下面看一下MainActivity.java:

[java]  view plain copy
  1. package com.zxx1.light;  
  2.   
  3. import android.app.Activity;  
  4. import android.hardware.Camera;  
  5. import android.hardware.Camera.Parameters;  
  6. import android.os.Bundle;  
  7. import android.view.KeyEvent;  
  8. import android.view.View;  
  9. import android.view.View.OnClickListener;  
  10. import android.view.Window;  
  11. import android.view.WindowManager;  
  12. import android.widget.Button;  
  13. import android.widget.Toast;  
  14.   
  15. public class LightActivity extends Activity {  
  16.     private Button lightBtn = null;  
  17.     private Camera camera = null;  
  18.     private Parameters parameters = null;  
  19.     public static boolean isLight = true// 定义开关状态,状态为false,打开状态,状态为true,关闭状态  
  20.     private int back = 0;//   
  21.   
  22.     @Override  
  23.     public void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         // 全屏设置,隐藏窗口所有装饰  
  26.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  27.         requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置屏幕显示无标题,必须启动就要设置好,否则不能再次被设置  
  28.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD,  
  29.                 WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);  
  30.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,  
  31.                 WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//保持屏幕常亮  
  32.         setContentView(R.layout.main);  
  33.   
  34.         lightBtn = (Button) findViewById(R.id.btn_light);  
  35.         lightBtn.setOnClickListener(new OnClickListenerImpl());  
  36.   
  37.     }  
  38.   
  39.     class OnClickListenerImpl implements OnClickListener {  
  40.         @Override  
  41.         public void onClick(View v) {  
  42.             if (isLight) {  
  43.   
  44.                 lightBtn.setBackgroundResource(R.drawable.shou_on);// 设置不同图片  
  45.                 camera = Camera.open();// 打开闪光灯  
  46.                 parameters = camera.getParameters();  
  47.                 parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);// 开启  
  48.                 camera.setParameters(parameters);  
  49.                 camera.startPreview();// 开启  
  50.                 isLight = false;  
  51.             } else {  
  52.                 lightBtn.setBackgroundResource(R.drawable.shou_off);  
  53.                 parameters.setFlashMode(Parameters.FLASH_MODE_OFF);// 关闭  
  54.                 camera.setParameters(parameters);  
  55.                 camera.stopPreview();  
  56.                 isLight = true;  
  57.                 camera.release();  
  58.             }  
  59.   
  60.         }  
  61.     }  
  62.   
  63.     @Override  
  64.     protected void onDestroy() {  
  65.         camera.release();  
  66.         super.onDestroy();  
  67.     }  
  68.   
  69.     @Override  
  70.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  71.         if (keyCode == KeyEvent.KEYCODE_BACK) {  
  72.             back++;  
  73.             switch (back) {  
  74.             case 1:  
  75.                 Toast.makeText(LightActivity.this, getString(R.string.again_exit), Toast.LENGTH_SHORT).show();  
  76.                 break;  
  77.             case 2:  
  78.                 back = 0;  
  79.                 DulBack();  
  80.                 break;  
  81.             }  
  82.             return true;  
  83.         } else {  
  84.             return super.onKeyDown(keyCode, event);  
  85.         }  
  86.     }  
  87.   
  88.     public void DulBack() { // 关闭程序  
  89.         if (isLight) {// 开关关闭时  
  90.             LightActivity.this.finish();  
  91.             android.os.Process.killProcess(android.os.Process.myPid());// 关闭进程  
  92.         } else if (!isLight) {// 开关打开时  
  93.             camera.release();  
  94.             LightActivity.this.finish();  
  95.             android.os.Process.killProcess(android.os.Process.myPid());// 关闭进程  
  96.             isLight = true;// 避免,打开开关后退出程序,再次进入不打开开关直接退出时,程序错误  
  97.         }  
  98.     }  
  99. }  

布局文件如下:

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/relativelayout"  
  4.     android:layout_width="wrap_content"  
  5.     android:layout_height="wrap_content" >  
  6.   
  7.     <Button  
  8.         android:id="@+id/btn_light"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_centerHorizontal="true"  
  12.         android:layout_centerVertical="true"  
  13.         android:background="@drawable/shou_off" />  
  14.   
  15. RelativeLayout>  

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

更多相关文章

  1. android 各种权限 permission 列举
  2. 五种控制Android应用的权限的方法
  3. android:windowSoftInputMode属性
  4. Android(安卓)电源管理 (部分转载)
  5. Android(安卓)6.0中的新技术有哪些
  6. Android中Notification详解【android进化三十五】
  7. 《解析 Google Android(安卓)DSK-智能手机开发范例手册》.(薛显
  8. Android(安卓)实现程序完全退出
  9. 【支付宝】Android(安卓)支付宝支付 沙箱测试(交易状态错误ALI31

随机推荐

  1. Android(安卓)CountDownLatch的使用
  2. Android后台运行的定时器实现
  3. Android(安卓)录音获取麦克风实时音量--
  4. android中的spannable的使用
  5. [转]Android(安卓)通知Notification 详解
  6. android 仿微信群聊头像 合成图片
  7. Android(安卓)UncaughtExceptionHandler
  8. Android自定义dialog对话框悬浮在界面上
  9. Appium自动化测试Android
  10. Qt on Android: Android(安卓)SDK安装