Android实战简易教程五十七(分享小米手电筒源码)
手电筒功能实现简单很实用,下面我们就来研究一下如何自制一款手电筒小程序,初学者可以通过实例了解原理,提高学习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;//
- @Override
- public 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 {
- @Override
- public 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();
- }
- }
- }
- @Override
- protected void onDestroy() {
- camera.release();
- super.onDestroy();
- }
- @Override
- public 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="http://schemas.android.com/apk/res/android"
- android:id="@+id/relativelayout"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" >
- <Button
- android: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>
最后别忘了配置权限,最后运行实例如下:
Android实战简易教程五十七(分享小米手电筒源码)相关推荐
- Android实战简易教程-第五十七枪(分享小米手电筒源码)
手电筒功能实现简单很实用,下面我们就来研究一下如何自制一款手电筒小程序,初学者可以通过实例了解原理,提高学习android技术的热情和动力. 首先我们了解一下手电筒要调用哪些android权限: &l ...
- Android实战简易教程-第五十一枪(ListView实现子控件的动态显示和隐藏、checkbox全选和反选)
前段时间写过一篇文章:Android实战简易教程-第四十七枪(ListView多选-实现点餐系统)有的同学留言建议,可不可以动态控制checkbox的显示和全选反选功能,我研究了一下,发现实现也比较容 ...
- Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自动填入功能结合实例)
用户注册或者找回密码时一般会用到短信验证功能,这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注册用户.获取SDK 大家可以 ...
- Android实战简易教程-第六十枪(分享一个城市选择功能模块)
在做一些APP的时候可能会用到城市选择模块的功能,本实例可以提供位置自定定位和手动选择的功能,非常好用,大家可以修改后加入自己的项目中. 首先看一下效果: 1.进入有的手机可能会提示权限要求,这时我们 ...
- Android实战简易教程-第六十五枪(自定义控件实现数字液晶时钟Demo)
下面我们研究一下如何实现一个数字液晶时钟,本质属于特效一种哈. 首先创建一个布局文件: <?xml version="1.0" encoding="utf-8&qu ...
- Android实战简易教程-第六十六枪(服务器端搭建和服务器端Json数据交互)
学习Android有一段时间了,对服务器端有很深的好奇,决定对服务器端的实现进行一些研究,这里实现了一个简单的小例子,用于获取服务器端的json数据,例子很简单,适合初学者学习使用. 服务器端 首先我 ...
- Android实战简易教程-第五十枪(工具类的测试)
在开发中,为了提高开发效率,我们一般会自定义自己的工具类.为了保证项目的可靠性,在将工具类引入项目之前,我们一般都会对工具类进行单元测试,下面我们通过一个实例看一下如何搭建测试环境. 1.首先自定义一 ...
- Android实战简易教程-第七十五枪(WIFI直连工具类)
设置指定的WIFI用户名密码和加密方式,可以进行WIFI直连. 1.工具类-WifiUtil.java: package demo.androidwar.com.myapplication;impor ...
- Android实战简易教程-第三十四枪(基于ViewPager和FragmentPagerAdapter实现滑动通用Tab)...
上一段时间写过一篇文章<基于ViewPager实现微信页面切换效果> 里面实现了相似微信Tab的页面.可是这样的实现方法有个问题.就是以后全部的代码逻辑都必须在MainActivity中实 ...
最新文章
- pl/sql 报ORA-12154: TNS:无法解析指定的连接标志符
- oracle rac 图形化界面,oracle 10g rac配置vipca进不了图形界面,请高手帮忙分析下
- java程序错误类型及异常处理
- Python零基础学习笔记(十三)—— if 和 if-else语句...
- 微信开发基础 获取用户OpenID 列表
- 【学神-RHEL7】1-3-Linux基本命令和配置服务器来电后自动开机
- Leetcode每日一题:1248.count-number-of-nice-subarrays(统计[优美子数组])
- iOS和js交互三部曲,很不错的文章和demo
- Map与数组、对象之间的转换
- 如何用C语言实现批量修改文件类型
- win11安装更新错误0x800f081f怎么解决?
- 基于epoll,socket与protobuf的简单帧同步游戏服务器
- hive中reduce类函数说明
- LWN:终于能够防护 straight-line 预测执行漏洞了!
- Object-based superresolution land cover Mapping From Remotely sensed imagery
- 物联网新零售项目 订单支付与出货控制
- 【例题 7-11 UVA - 12325】Zombie's Treasure Chest
- 如何用chrome调试android应用程序,用Chrome调试你的android应用
- 3d游戏建模可以自学吗?小白教程
- springboot(三):连接mysql数据库