第五十七枪(分享小米手电筒源码)

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

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

<!– 打开Camera的权限 –><uses-permission android:name="android.permission.CAMERA" /><uses-feature android:name="android.hardware.camera" /><uses-feature android:name="android.hardware.autofocus" /><!– 开启闪光灯权限 –><uses-permission android:name="android.permission.FLASHLIGHT" /><uses-permission android:name="android.permission.DISABLE_KEYGUARD" />上面三个是摄像头权限,下面两个是闪光灯权限,在本实例中都要配置一下。

下面看一下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"?><RelativeLayout xmlns:android=""android:id="@+id/relativelayout"android:layout_width="wrap_content"android:layout_height="wrap_content" ><Buttonandroid:id="@+id/btn_light"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:background="@drawable/shou_off" /></RelativeLayout>最后别忘了配置权限,最后运行实例如下:

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

长江后浪催前浪,一辈新人换旧人。

第五十七枪(分享小米手电筒源码)

相关文章:

你感兴趣的文章:

标签云: