前几天这边一个小区断电,黑麻麻的,一只猫闯进寝室,把我吓哭,然后就果断写了个手电筒,下次断电,再来,我要吓死它。

我之前看到很多人都是直接调用闪光灯,其实大部分机型都不支持,我这个是用相机功能来实现的,大部分机型都支持。

MainActivity.class

public class MainActivity extends FragmentActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

if (isFlashSupported()) {

if (savedInstanceState == null) {

getSupportFragmentManager().beginTransaction().add(R.id.container, new FlashlightFragment()).commit();

}

} else {

showNoFlashAlert();

}

}

private void showNoFlashAlert() {

new AlertDialog.Builder(this)

.setMessage(R.string.device_not_support_msg)

.setIcon(android.R.drawable.ic_dialog_alert).setTitle(R.string.device_not_support_title)

.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

finish();

}

}).create().show();

}

private boolean isFlashSupported() {

PackageManager pm = getPackageManager();

return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

}

public static class FlashlightFragment extends Fragment implements SurfaceHolder.Callback {

public FlashlightFragment() { }

ImageButton btnSwitch;

ImageView bg;

private boolean isLighOn = false;

private Camera camera;

Camera.Parameters params;

@Override

public void onStart() {

super.onStart();

SurfaceView preview = (SurfaceView) getView().findViewById(R.id.PREVIEW);

SurfaceHolder mHolder = preview.getHolder();

mHolder.addCallback(this);

}

@Override

public void onPause() {

super.onPause();

turnOffFlash();

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_main_activity, container, false);

// flash switch button

btnSwitch = (ImageButton) view.findViewById(R.id.flashlight_button);

bg = (ImageView) view.findViewById(R.id.flashlight_bg);

// displaying button image

toggleBgImage();

// Switch button click event to toggle flash on/off

btnSwitch.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if (isLighOn) {

turnOffFlash();

} else {

turnOnFlash();

}

}

});

return view;

}

// Turning On flash

private void turnOnFlash() {

if (!isLighOn) {

if (camera == null || params == null) {

return;

}

params = camera.getParameters();

params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);

camera.setParameters(params);

camera.startPreview();

isLighOn = true;

toggleBgImage();

}

}

// Turning Off flash

private void turnOffFlash() {

if (isLighOn) {

if (camera == null || params == null) {

return;

}

params = camera.getParameters();

params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);

camera.setParameters(params);

camera.stopPreview();

isLighOn = false;

toggleBgImage();

}

}

private void toggleBgImage() {

if (isLighOn) {

bg.setImageResource(R.mipmap.f_on);

} else {

bg.setImageResource(R.mipmap.f_off);

}

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

if (camera != null) {

camera.stopPreview();

camera.setPreviewCallback(null);

camera.release();

camera = null;

}

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

if (camera == null) {

camera = Camera.open();

params = camera.getParameters();

try {

camera.setPreviewDisplay(holder);

} catch (IOException e) {

camera.release();

camera = null;

}

}

turnOnFlash();

}

}

}

fragment_main_activity.xml

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

>

android:id="@+id/PREVIEW"

android:layout_width="1dp"

android:layout_height="1dp"/>

android:id="@+id/flashlight_bg"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:src="@mipmap/f_on"

android:scaleType="centerCrop"

/>

android:id="@+id/flashlight_button"

android:layout_width="100dp"

android:layout_height="200dp"

android:layout_centerInParent="true"

android:background="@android:color/transparent"

android:text="fuck"/>

activity_main.xml

android:id="@+id/container"

android:layout_width="match_parent"

android:layout_height="match_parent"

/>

AndroidManifest.xml

package="com.liujinghuiuncleapp.app.tool.flashlight" >

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:theme="@style/AppTheme"

android:label="@string/app_name" >

android:name=".MainActivity"

android:label="@string/app_name" >

以上所述就是本文的全部内容了,希望大家能够喜欢。

android打开手电筒代码,Android 通用型手电筒代码相关推荐

  1. android 打开其它app,Android 在一个APP里打开另一个APP

    前言 不知道你们有没有注意过,每次打开一些软件的时候都会有广告引导页,有时候手滑点到了,会有进入手机上的另一个APP,这有没有引起你的注意呢? 运行效果图 正文 为了测试这个功能,首先要创建两个项目, ...

  2. android 打开网络pdf,Android 打开网络上pdf文件

    1.基本思路: 打开网络pdf 思路整体还是来源与图片的加载. android中加载网络图片的框架有很多个.如image-laoder, fresco.glide等,首先都是从内存中找图片,如果内存中 ...

  3. android打开位置服务,Android - 位置定位(Location)服务(Service)类的基本操作

    位置定位(Location)服务(Service)类的基本操作 本文地址: http://blog.csdn.net/caroline_wendy 定位服务(Location Service),能够确 ...

  4. android打开sqlite数据库,Android:打开和关闭SQLite数据库

    我正在开发和android应用程序,我经常使用它访问本地数据库.这个数据库可以从不同的therads访问,所以我对数据库有一个协调问题.我使用以下open()和close()方法.Android:打开 ...

  5. android 打开其它app,Android APP打开另一个APP的几种实现总结

    需求分析: 1.A点击拉起B: 2.如果B没安装,下载安装: 3.如果B已安转,未在后台运行点击打开B,传值账号密码,做跨登录: 4.如果B已安装,且正在后台运行,A打开B直接显示在后台运行的页面: ...

  6. android打开相册功能,Android 常用系统功能(打开相册,打开系统设置等等)

    1.开开相册: private void selectImg() { Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Ima ...

  7. android打开qsv视频,android手机如何播放qsv

    随着奇艺改名爱奇艺后,版面大改版,内容是质的飞跃.从PC端的爱奇艺发布后,无广告,高清,支持离线等等.特别是近期各种大片连番上映各种大片.但是问题出现了,用PC端的爱奇艺离线后的影片都是QSV格式的, ...

  8. android 打开日历功能,Android使用GridView实现日历的简单功能

    简单的日历实现,只是显示了每一个月,没有显示当天和记事这些功能 主要是计算月初是周几,月末是周几,然后相应的显示上一月多少天和下一月多少天. 先看一下关于日期的用到的几个工具类 /** * 获取该月天 ...

  9. android 打开地图选项,Android 打开地图App 和 网页版地图

    URI 拼写: public class StringUtil { /** * Check if the string is empty * * @param input string to be c ...

最新文章

  1. CF1006E Military Problem
  2. centos nfs端口固定
  3. 算法提高课-动态规划-树形DP-AcWing 1072. 树的最长路径:dfs写法
  4. redis 2m数据读取_Flink读写Redis(二)读取redis数据
  5. python 隐含波动率_【BSM模型】用实际市场数据计算隐含波动率并验证波动率微笑...
  6. java实现鸭子类型,Golang的interface及duck typing鸭子类型
  7. mysql的错误代码4999_mysql相关错误以及对应解决方法总结
  8. OpenCV精进之路(十九):工具——程序打包发布
  9. mysql的db.opt文件_MySQL数据库的db.opt文件
  10. AMPL—快速了解,秒懂它。
  11. aptana php插件使用教程,用Aptana Studio 1.5开发PHP,很强的PHP IDE,Aptana PHP,简介,安装教程...
  12. JAVA如何在LINUX里编程,如何使用加多宝(jdb)在linux下调试Java程序
  13. 虚拟机里博图能连接上实物PLC,但是HMI仿真不能连接实物PLC
  14. java上位机开发(编译和部署)
  15. 强烈推荐一款开源项目! (OPC)微服务能力开放平台!
  16. Java怎么弹出cmd命令窗口_怎么在java里打开bat文件,并打开cmd窗口执行,举例一个完整代码。...
  17. 20200928 006.简单错误如何处理_守破离学习法_程序员修炼手册
  18. 位、比特(bit)、字节(byte)(B)、KB、MB、GB的含义
  19. 【BUUCTF】MISC 秘密文件
  20. raid5和iscs网络存储服务i配置

热门文章

  1. IP地址、网络号、网关的区别
  2. Microsoft Edge 开启 IE 模式
  3. 搭建个人博客(论坛)的建议
  4. DirectX 总结
  5. VIT 三部曲 -1 Transformer
  6. iMatrix平台核心功能—Portal 介绍
  7. 如何根据LAC和CellID进行手机定位
  8. 【学习点滴】网络相关理解与http协议
  9. 儿子读书成绩不好能学计算机专业吗,我的儿子十七岁了,学习成绩不好,也不爱念书,整天就是玩电脑和手机,我想让他学点儿技术不知道学什么适...
  10. 大数据核心技术与应用实战峰会(上):大数据在多行业内大放异彩