Android手电筒兼容各个手机与版本

Android手电筒兼容各个手机与版本,第1张

概述Android手电筒兼容各个手机与版本 在写手电筒APP之前,当然已经参考market上的很多手电筒APP,还有网上如何实现手电筒功能的各种源码.不管是源码还是market上的APP,总结了几点的问题. 1.我下载market上的所有手电筒APP都是通过Camera打开闪光灯的方式来实现的,但是大部分APP在打开Camera时没有进行异常处理工作,也没有任何的提示,如果当其他的程序在使用Camera时,并且返回或点Home后没有释放Camera,这时在启动相应的手电筒APP就会出现崩溃或者手电筒功能已经失效,这种用户体验用户是不能接受

在写手电筒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_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

<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:orIEntation="vertical" tools:context=".MainActivity" > <SurfaceVIEw androID:ID="@+ID/surfacevIEw" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:background="#FFFFFF"/></linearLayout>

好了,有兴趣的朋友可以下载源码,代码中都已加入了详细的注释

如果下载后调试发现运行不正常,可以反馈一起交流

源码下载地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

总结

以上是内存溢出为你收集整理的Android手电筒兼容各个手机与版本全部内容,希望文章能够帮你解决Android手电筒兼容各个手机与版本所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1145725.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存