Android小应用之一个activity实现简易手电筒(内附免费源码)

  • 1.activity代码
  • 2.xml代码
  • 3.资源文件代码
  • 4.源码压缩包(免费)

今天爷爷说他手机更新之后找不到手电筒了,我心想是不是爷爷年纪大了的原因,然后拿过手机一看,竟然还真找不到,好吧,给爷爷到应用市场下载了一个手电筒,但是一个2.多mb的手电筒竟然还有广告,我想着还不如我自己写一个,虽然我是小小白,但好歹我也学了安卓,然后就搜博客找到一篇十分适合我的博客,最后成功制作出我的“玫瑰手电筒”(当然给我爷爷的会更加特别哈哈哈,在这里是面向广大用户,所以在有些地方做了一些修改)
参考博客

真机运行演示(模拟器没闪光灯的,点亮手电筒会报错)

手电图案灰色为关闭闪光灯,手电图案彩色为打开了闪光灯,然后下面的字也会切换

1.activity代码


public class MainActivity extends AppCompatActivity {ConstraintLayout mConstraintLayout;Button mButton;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mButton=findViewById(R.id.button);mConstraintLayout=findViewById(R.id.constraintLayout);final FlashUtils utils = new FlashUtils(this);mConstraintLayout.setSelected(false);mButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {utils.converse();}});}public class FlashUtils {private CameraManager manager;private Camera mCamera = null;private Context context;private boolean status = false;//记录手电筒状态FlashUtils(Context context){if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);}this.context = context;}//打开手电筒public void open() {if(status){//如果已经是打开状态,不需要打开return;}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {try {manager.setTorchMode("0", true);} catch (Exception e) {e.printStackTrace();}} else {PackageManager packageManager = context.getPackageManager();FeatureInfo[] features = packageManager.getSystemAvailableFeatures();for (FeatureInfo featureInfo : features) {if (PackageManager.FEATURE_CAMERA_FLASH.equals(featureInfo.name)) { // 判断设备是否支持闪光灯if (null == mCamera) {mCamera = Camera.open();}Camera.Parameters parameters = mCamera.getParameters();parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);mCamera.setParameters(parameters);mCamera.startPreview();}}}status = true;//记录手电筒状态为打开}//关闭手电筒public void close() {if(!status){//如果已经是关闭状态,不需要打开return;}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {try {manager.setTorchMode("0", false);} catch (Exception e) {e.printStackTrace();}} else {if (mCamera != null) {mCamera.stopPreview();mCamera.release();mCamera = null;}}status = false;//记录手电筒状态为关闭}//改变手电筒状态public void converse(){if(status){close();mConstraintLayout.setSelected(false);}else{open();mConstraintLayout.setSelected(true);}}}}

2.xml代码

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:id="@+id/constraintLayout"android:layout_height="match_parent"android:background="#000000"tools:context=".MainActivity"><ImageViewandroid:id="@+id/imageView3"android:layout_width="40dp"android:layout_height="40dp"android:layout_marginStart="20dp"android:layout_marginLeft="20dp"android:background="@drawable/love"app:layout_constraintBottom_toBottomOf="@+id/textView2"app:layout_constraintStart_toEndOf="@+id/textView2"app:layout_constraintTop_toTopOf="@+id/textView2" /><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="50dp"android:text="为你定制"android:textColor="#03A9F4"android:textSize="24sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /><ImageViewandroid:layout_width="40dp"android:layout_height="40dp"android:layout_marginEnd="20dp"android:layout_marginRight="20dp"android:background="@drawable/love"app:layout_constraintBottom_toBottomOf="@+id/textView2"app:layout_constraintEnd_toStartOf="@+id/textView2"app:layout_constraintTop_toTopOf="@+id/textView2" /><Buttonandroid:id="@+id/button"android:layout_width="300dp"android:layout_height="300dp"android:background="@drawable/flash_icon"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="'走路小心,注意安全'"android:textColor="@color/textcolor"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintBottom_toBottomOf="parent"android:layout_marginBottom="100dp"android:textSize="24sp"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="'天天开心'"android:textColor="@color/text2color"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintBottom_toBottomOf="parent"android:layout_marginBottom="100dp"android:textSize="24sp"/>
</androidx.constraintlayout.widget.ConstraintLayout>

3.资源文件代码

text2color

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:color="#03A9F4" android:state_selected="false"/><item android:color="#00000000" android:state_selected="true"/>
</selector>

textcolor

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:color="#000000" android:state_selected="false"/><item android:color="#F44336" android:state_selected="true"/></selector>

flash_icon

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_selected="true" android:drawable="@drawable/flash"/><item android:state_selected="false" android:drawable="@drawable/unflash"/></selector>

4.源码压缩包(免费)

https://download.csdn.net/download/qq_46526828/12626160

突然觉得有时候想做一件事虽然是心血来潮,但是完成的感觉却是无与伦比的开心。
博主为了可以学到更多的Android知识,创建了一个安卓知识交流群,欢迎大佬入群,当然也欢迎和我一样的安卓小白,我们可以一起交流,最重要的是快乐水群,记得定个小目标,冲击bat

Android 小应用之一个activity实现简易手电筒(内附免费源码)相关推荐

  1. Android开发应用案例——简易计算器(附完整源码)

    Android开发-AS学习(一) Android开发-AS学习(二) 使用android studio开发简易计算器app(完整源码可在博主资源中自行下载) 最终效果: 开发步骤: 创建一个名为ca ...

  2. C++求一个整数的各位数字总和(附完整源码)

    C++求一个整数的各位数字总和算法 C++求一个整数的各位数字总和算法完整源码(定义,实现,main函数测试) C++求一个整数的各位数字总和算法完整源码(定义,实现,main函数测试) int su ...

  3. 熬了三个大夜利用Python开发一个炸金花小游戏,注意别玩上瘾了~~(附完整源码)

    大家好,我是你们的好朋友王老师~ 众所周知扑克牌可谓是居家旅行.桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则. 炸(诈)金花又叫三张牌, ...

  4. 用python开发一个炸金花小游戏,注意别玩上瘾了~~(附完整源码)

    大家好,我是辰哥~ 众所周知扑克牌可谓是居家旅行.桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则. 炸(诈)金花又叫三张牌,是在全国广泛流 ...

  5. [内附完整源码和文档] 基于Android网络聊天室的设计与实现

    前 言 随着我国科技水平的提高和移动通讯的飞速发展与普及,人们通过移动网络可做的事情越来越多,人们之间的沟通不在局限于面对面的对话,人们通过手机可以很方便的上网并通过手机上的APP进行聊天这样既节省话 ...

  6. [内附完整源码和文档] 基于Android Studio实现的新闻APP

    一.作业题目 实现一个安卓新闻类App,最低支持安卓系统版本为5.1(minSdkVersion 为API 16 https://developer.android.com/guide/topics/ ...

  7. [内附完整源码和文档] 基于Android的移动手机端五子棋游戏APP的设计与实现

    一.项目概述 近年来,随着安卓手机的普及,安卓游戏成为广大用户关注的方向.五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏,主 ...

  8. 基于微信小程序实现警务活动管理系统设计演示【附项目源码+论文说明】分享

    基于微信小程序实现警务活动管理系统设计演示 摘要 随着我国经济迅速发展,人们对网络管理的需求越来越大,各种系统也越来越多,由于微信的发展,微信的功能越来越齐全,越来越多的人开始使用微信.因此,特开发了 ...

  9. Android高级开发之【RxJava】详解(附项目源码)

    文章大纲 一.什么是RxJava 二.为什么要用RxJava 三.RxJava使用详解 四.项目源码下载 一.什么是RxJava Rx(Reactive Extensions)是一个库,用来处理事件和 ...

最新文章

  1. C++中定义类的对象:用new和不用new的区别
  2. 用XMLHTTP获取动态页生成的HTML内容
  3. 配置maven mvn命令使用jdk 1.7编译
  4. 从JDBC ResultSet创建对象流
  5. 会计基础模拟练习一(3)
  6. 该来的终于来了:“第一起”基于 IPv6 的 DDoS 攻击
  7. 推荐几个学习JS的站点
  8. 内外网同时使用-路由配置
  9. 安卓dj专业打碟机软件_djay Pro 2 for mac(专业DJ打碟软件)
  10. 【最终幻想15 国王之剑】制作介绍2:最大限度满足角色,背景和道具的要求
  11. png的计算机储存图片的格式吗,win7系统下png图片转换成jpg格式的三种方法
  12. 评价页面html,利用html与css制作5星好评页面
  13. 《Fooled by Randomness》读书笔记
  14. cannot import name ‘DistanceMetric‘ from ‘sklearn.metrics‘
  15. 使用FlatBuffers序列化数据
  16. java控制台输出脚标上标下标,c – 如何在CLI上打印下标/上标?
  17. linux安装——管理应用程序
  18. 微PE工具箱v1.0 维护版本64位(0913)
  19. 泰雷兹高科技赋能全球最安全的电子护照之一,泰国公民咸受其益
  20. oracle如何取正负数,ORACLE 统计正负个数sql

热门文章

  1. springmvc中数据绑定,controler开发细节,以及与struts2对比
  2. [免费专栏] Android安全之Android APP应用程序的汉化功能 (修改so中的字符串内容)
  3. MATLAB 图像处理于数字化(一)
  4. AX=XB李群李代数知识求解方程
  5. 北京soul_提问艺术家:北京《Soul i-D》展
  6. 计算机教师线下研修方式与内容,工作坊线下研修活动心得体会
  7. TI SYS/BIOS
  8. 教您几招应对雾霾天气
  9. 获取汉字GBK编码的方式汇总
  10. 主路径覆盖与基路径覆盖