android打开手电筒代码,Android 通用型手电筒代码
前几天这边一个小区断电,黑麻麻的,一只猫闯进寝室,把我吓哭,然后就果断写了个手电筒,下次断电,再来,我要吓死它。
我之前看到很多人都是直接调用闪光灯,其实大部分机型都不支持,我这个是用相机功能来实现的,大部分机型都支持。
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 通用型手电筒代码相关推荐
- android 打开其它app,Android 在一个APP里打开另一个APP
前言 不知道你们有没有注意过,每次打开一些软件的时候都会有广告引导页,有时候手滑点到了,会有进入手机上的另一个APP,这有没有引起你的注意呢? 运行效果图 正文 为了测试这个功能,首先要创建两个项目, ...
- android 打开网络pdf,Android 打开网络上pdf文件
1.基本思路: 打开网络pdf 思路整体还是来源与图片的加载. android中加载网络图片的框架有很多个.如image-laoder, fresco.glide等,首先都是从内存中找图片,如果内存中 ...
- android打开位置服务,Android - 位置定位(Location)服务(Service)类的基本操作
位置定位(Location)服务(Service)类的基本操作 本文地址: http://blog.csdn.net/caroline_wendy 定位服务(Location Service),能够确 ...
- android打开sqlite数据库,Android:打开和关闭SQLite数据库
我正在开发和android应用程序,我经常使用它访问本地数据库.这个数据库可以从不同的therads访问,所以我对数据库有一个协调问题.我使用以下open()和close()方法.Android:打开 ...
- android 打开其它app,Android APP打开另一个APP的几种实现总结
需求分析: 1.A点击拉起B: 2.如果B没安装,下载安装: 3.如果B已安转,未在后台运行点击打开B,传值账号密码,做跨登录: 4.如果B已安装,且正在后台运行,A打开B直接显示在后台运行的页面: ...
- android打开相册功能,Android 常用系统功能(打开相册,打开系统设置等等)
1.开开相册: private void selectImg() { Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Ima ...
- android打开qsv视频,android手机如何播放qsv
随着奇艺改名爱奇艺后,版面大改版,内容是质的飞跃.从PC端的爱奇艺发布后,无广告,高清,支持离线等等.特别是近期各种大片连番上映各种大片.但是问题出现了,用PC端的爱奇艺离线后的影片都是QSV格式的, ...
- android 打开日历功能,Android使用GridView实现日历的简单功能
简单的日历实现,只是显示了每一个月,没有显示当天和记事这些功能 主要是计算月初是周几,月末是周几,然后相应的显示上一月多少天和下一月多少天. 先看一下关于日期的用到的几个工具类 /** * 获取该月天 ...
- android 打开地图选项,Android 打开地图App 和 网页版地图
URI 拼写: public class StringUtil { /** * Check if the string is empty * * @param input string to be c ...
最新文章
- CF1006E Military Problem
- centos nfs端口固定
- 算法提高课-动态规划-树形DP-AcWing 1072. 树的最长路径:dfs写法
- redis 2m数据读取_Flink读写Redis(二)读取redis数据
- python 隐含波动率_【BSM模型】用实际市场数据计算隐含波动率并验证波动率微笑...
- java实现鸭子类型,Golang的interface及duck typing鸭子类型
- mysql的错误代码4999_mysql相关错误以及对应解决方法总结
- OpenCV精进之路(十九):工具——程序打包发布
- mysql的db.opt文件_MySQL数据库的db.opt文件
- AMPL—快速了解,秒懂它。
- aptana php插件使用教程,用Aptana Studio 1.5开发PHP,很强的PHP IDE,Aptana PHP,简介,安装教程...
- JAVA如何在LINUX里编程,如何使用加多宝(jdb)在linux下调试Java程序
- 虚拟机里博图能连接上实物PLC,但是HMI仿真不能连接实物PLC
- java上位机开发(编译和部署)
- 强烈推荐一款开源项目! (OPC)微服务能力开放平台!
- Java怎么弹出cmd命令窗口_怎么在java里打开bat文件,并打开cmd窗口执行,举例一个完整代码。...
- 20200928 006.简单错误如何处理_守破离学习法_程序员修炼手册
- 位、比特(bit)、字节(byte)(B)、KB、MB、GB的含义
- 【BUUCTF】MISC 秘密文件
- raid5和iscs网络存储服务i配置