Android手电筒如何兼容各个手机与版本
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章给大家分享的是有关Android手电筒如何兼容各个手机与版本的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在写手电筒APP之前,当然已经参考market上的很多手电
千家信息网最后更新 2025年11月15日Android手电筒如何兼容各个手机与版本
这篇文章给大家分享的是有关Android手电筒如何兼容各个手机与版本的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
在写手电筒APP之前,当然已经参考market上的很多手电筒APP,还有网上如何实现手电筒功能的各种源码。不管是源码还是market上的APP,总结了几点的问题。
1.我下载market上的所有手电筒APP都是通过Camera打开闪光灯的方式来实现的,但是大部分APP在打开Camera时没有进行异常处理工作,也没有任何的提示,如果当其他的程序在使用Camera时,并且返回或点Home后没有释放Camera,这时在启动相应的手电筒APP就会出现崩溃或者手电筒功能已经失效,这种用户体验用户是不能接受的!
2,网上很多Camera打开闪光灯实现手电筒的源码,而且原理都是一样的,当然这些代码并没有错误,但存在的问题是这些源码在有的手机版本上能够实现相应的功能,在另外的手机版本上就不起作用了,在CSDN资源中的大部分手电筒Demo也都会存在此问题,兼容性不好!
我自己实现的这个手电筒很简单,没有任何的UI界面,进入APP后就直接照明,实现的原理就2点:
1.跟其他手电筒APP一样,用Camera打开闪光灯开始照明
2.将当前屏幕的背光调节为最亮状态,退出时在恢复之前的背光值
代码和布局如下:
MainActivity.java
package huahua.flashlight; import java.io.IOException; import android.app.Activity;import android.content.ContentResolver;import android.content.pm.FeatureInfo;import android.content.pm.PackageManager;import android.hardware.Camera;import android.os.Bundle;import android.provider.Settings;import android.provider.Settings.SettingNotFoundException;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.Window;import android.view.WindowManager;import android.widget.Toast; /** * 花花手电筒 * @author huahua */public class MainActivity extends Activity implements SurfaceHolder.Callback{ private static final String TAG = "huahua"; /** * 进入APP时的背光亮度值 */ int normal; /** * 进入APP时,是否为自动调节亮度状态 */ boolean AutoBrightnessOpen = false; private Camera camera; private SurfaceView surfaceView; private SurfaceHolder surfaceHolder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //去除title this.requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉Activity上面的状态栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); surfaceView = (SurfaceView) this.findViewById(R.id.surfaceview); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(this); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); if(isAutoBrightness(getContentResolver())) { AutoBrightnessOpen = true; } normal = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 255); PackageManager pm= this.getPackageManager(); FeatureInfo[] features=pm.getSystemAvailableFeatures(); for(FeatureInfo f : features) { if(PackageManager.FEATURE_CAMERA_FLASH.equals(f.name)) //判断设备是否支持闪光灯 { Log.d("huahua","支持闪光灯"); } } } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); Closeshoudian(); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); Openshoudian(); } /** * 判断是否开启了自动亮度调节 * * @param aContext * @return */ public boolean isAutoBrightness(ContentResolver aContentResolver) { boolean automicBrightness = false; try { automicBrightness = Settings.System.getInt(aContentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; } catch (SettingNotFoundException e) { e.printStackTrace(); } return automicBrightness; } /** * 停止自动亮度调节 * * @param activity */ public void stopAutoBrightness(Activity activity) { Settings.System.putInt(activity.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); } /** * 恢复自动亮度调节 * * @param activity */ public void setAutoBrightness(Activity activity) { Settings.System.putInt(activity.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); } /** * 打开手电筒 */ public void Openshoudian() { //异常处理一定要加,否则Camera打开失败的话程序会崩溃 try { Log.d("huahua","camera打开"); camera = Camera.open(); } catch (Exception e) { Log.d("huahua","Camera打开有问题"); Toast.makeText(MainActivity.this, "Camera被占用,请先关闭", Toast.LENGTH_SHORT).show(); } if(camera != null) { //打开闪光灯 camera.startPreview(); Camera.Parameters parameter = camera.getParameters(); parameter.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); camera.setParameters(parameter); Log.d("huahua","闪光灯打开"); //先关闭自动调节背光功能,才可以调节背光 if(AutoBrightnessOpen) { stopAutoBrightness(MainActivity.this); } //将背光设置为最亮 WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.screenBrightness = Float.valueOf(255) * (1f / 255f); getWindow().setAttributes(lp); } } /** * 关闭手电筒 */ public void Closeshoudian() { if (camera != null) { //关闭闪光灯 Log.d("huahua", "closeCamera()"); camera.getParameters().setFlashMode(Camera.Parameters.FLASH_MODE_OFF); camera.setParameters(camera.getParameters()); camera.stopPreview(); camera.release(); camera = null; //恢复进入程序前的背光值 WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.screenBrightness = Float.valueOf(normal) * (1f / 255f); getWindow().setAttributes(lp); //如果进入APP时背光为自动调节,则退出时需要恢复为自动调节状态 if(AutoBrightnessOpen) { setAutoBrightness(MainActivity.this); } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { try { if(camera != null) { camera.setPreviewDisplay(holder); } } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub } }activity_main.xmlactivity_main.xml
感谢各位的阅读!关于"Android手电筒如何兼容各个手机与版本"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
手电
手电筒
调节
闪光
闪光灯
亮度
手机
版本
功能
源码
状态
问题
程序
代码
内容
原理
大部分
更多
照明
用户
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
泰科电子有限公司软件开发
数据库怎么加引号
网络安全的结题报告
联想帮助疫情管理的服务器
安徽北斗授时模块服务器虚拟主机
天津河西区网络技术证书
怎么才能进入国家网络安全局
企业电脑用哪个服务器系统
服务器崩溃的维修视频
网络技术求职信模板
西方先进的网络技术
网络安全图标 盾牌
软件开发 需求文档
柯美6500服务器没电
网络安全类型及应对措施
网络安全日常监控表
小学网络安全检查信息
软件开发干不动了
网络安全法几年出来的
查找标准的专业数据库网站
计算机网络技术的模拟题
30岁软件开发能转sap么
福建软件开发工程师
电脑没网络dns服务器
服务器崩溃的维修视频
灵璧县公安局网络安全建设
系统软件开发包是系统软件吗
目前身边网络安全存在的问题
查看2008服务器启动日志
dxs服务器搭建