Android手电筒如何兼容各个手机与版本
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关Android手电筒如何兼容各个手机与版本的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在写手电筒APP之前,当然已经参考market上的很多手电
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
广州淘业互联网络科技
互联网科技行业发展
金融科技还是互联网
青岛互联网科技公司
远信互联网科技
互联网金融科技平台
山东吉时兔互联网科技有限公司
小米互联网科技园设置
佳云科技和互联网广告
港股科技和互联网
花神(南京)互联网科技有限公司
江阴互联网智能科技产品进口
健康食品互联网创新科技园项目
威龙国际互联网科技公司
互联网方面的科技前沿
互联网营销推广黑科技
西安有哪些互联网高科技企业
容联科技互联网电商
陕西彩京云互联网科技有限公司
互联网的黑科技实验室
什么是科技互联网
科技赋能下的互联网金融
滨湖区互联网智能科技产品供应
天津腾达互联网科技有限公司
互联网科技和法律行业
上海互联网科技公司ppt
江苏互联网科技小贷
互联网科技企业商标注意事项
求路客互联网科技电话
宁波允成互联网科技有限公司