解决闪光灯代码在Nexus5上面打不开的问题
2024-08-22 17:17:43
参考:http://blog.csdn.net/cy524563/article/details/41545387
关键在于:
int textureId = 0;
whyCamera.setPreviewTexture(new SurfaceTexture(textureId));//关键代码:解决在Nexus5上面打不开闪光灯的问题
之前在网上找到的关键代码均不含有以上两行代码,所以导致在Nexus5手机上面打不开闪光灯。
详细代码如下:自定义了一个类,用于执行闪关灯的打开、关闭、销毁等功能。
package com.why.flashlight50.model; import android.app.Activity;
import android.content.Context;
import android.content.pm.FeatureInfo;
import android.content.pm.PackageManager;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.Parameters;
import android.util.Log;
import android.widget.Toast; public class LedCamera { private static final String TAG = "LedCamera";
private static Camera whyCamera = null;
private static Parameters whyparameters = null;
private static Activity activityObj;//activity对象,由activity界面中传入:比如MainActivity,用于获取view //给whyCamera变量赋值
public static void prepareCameraLed(Activity activity){
activityObj = activity;
if (!isSupportFlashlightSimple(activityObj)) {
Toast.makeText(activity, "当前设备没有闪光灯", Toast.LENGTH_LONG).show();
return;
}else{
if(whyCamera == null){ try{
whyCamera = Camera.open();
Log.v("ObjectCode", "LedCamera:whyCamera="+whyCamera.hashCode());
Log.v("ObjectCode", "LedCamera:activityObj="+activityObj.hashCode());
return;
}catch(Exception localException){
localException.printStackTrace();
} }
} } //给whyCamera变量赋值
public static void prepareCameraLed(Context context){
if (!isSupportFlashlightSimple(context)) {
Toast.makeText(context, "当前设备没有闪光灯", Toast.LENGTH_LONG).show();
return;
}else{
if(whyCamera == null){ try{
whyCamera = Camera.open();
Log.v("ObjectCode", "LedCamera:whyCamera="+whyCamera.hashCode());
Log.v("ObjectCode", "LedCamera:activityObj="+context.hashCode());
return;
}catch(Exception localException){
localException.printStackTrace();
} }
} } //开启闪光灯
public static void openCameraLed(){ if(whyCamera != null){ try{
int textureId = 0;
whyCamera.setPreviewTexture(new SurfaceTexture(textureId));//关键代码:解决在Nexus5上面打不开闪光灯的问题 whyparameters = whyCamera.getParameters();
Log.v(TAG,"openCameraLed=="+whyparameters.getFlashMode());
if ((whyparameters != null) && (whyparameters.getFlashMode() != null))
{
whyparameters.setFlashMode("torch");//修改为字符串
whyCamera.setParameters(whyparameters);
} Log.v(TAG,"openCameraLed=="+whyparameters.getFlashMode());
//打开预览
whyCamera.startPreview(); return; }catch(Exception localException){
localException.printStackTrace();
}
}
} //关闭闪光灯
public static void closeCameraLed(){ if(whyCamera != null){ try{ whyparameters = whyCamera.getParameters();
Log.v(TAG,"closeCameraLed=="+whyparameters.getFlashMode());
if ((whyparameters != null) && (whyparameters.getFlashMode() != null))
{
whyparameters.setFlashMode("off");//修改为字符串
whyCamera.setParameters(whyparameters);
}
Log.v(TAG,"closeCameraLed=="+whyparameters.getFlashMode());
//关闭预览
whyCamera.stopPreview();
return; }catch(Exception localException){
localException.printStackTrace();
}
} } //释放camera资源
public static void releaseCameraLed()
{
if (whyCamera != null){
try
{
whyCamera.release();
whyCamera = null;
return;
}
catch (Exception localException)
{
localException.printStackTrace();
}
}
} /**
* 判断手机是否支持闪光灯
* @param context
* @return
*/
public static boolean isSupportFlashlight(Context context) {
PackageManager packageManager = context.getPackageManager();
FeatureInfo[] features = packageManager.getSystemAvailableFeatures();
for(FeatureInfo f : features) {
if(PackageManager.FEATURE_CAMERA_FLASH.equals(f.name))
return true;
}
return false;
}
/**
* 判断手机是否支持闪光灯--简单版
* @param context
* @return
*/
public static boolean isSupportFlashlightSimple(Context context) {
PackageManager packageManager = context.getPackageManager();
if(packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)){
return true;
}
return false;
} }
LedCamera
最新文章
- C# 利用占位符替换word中的字符串和添加图片
- android Unhandled exception type ParseException提示报错
- css-关于absolute和relative的一些笔记
- 用CSS让未知高度内容垂直方向居中
- Asm Shader Reference --- Shader Model 2.0 part
- mousewheel 与 DOMMouseScroll
- C++ 头文件系列(array)
- 基于swift MKMapkit 开发的地图定位导航
- MyBatis物理分页的代码实现
- input type=file 上传文件样式美化(转载)
- 关于pycharm中使用charts无法显示图表的问题(属于个人粗心问题)
- 第6章 Selenium2-Java 自动化测试模型
- sublime 可能卡的原因
- for&;while循环
- 框架: require.js
- 【转】ABP webapi三种方式
- 深入了解preventDefault与stopPropagation
- [.NET] 使用VALIDATIONCONTEXT快速进行模型资料的验证 》简单xml创建-json转xml
- JUC线程池之 ThreadPoolExecutor简介
- 查看shell环境下,网络是否连通-curl/ping
热门文章
- 傲游浏览器4,傲游浏览器5如何一键批量打开url链接。
- bzoj 1833 [ZJOI2010]count 数字计数(数位DP)
- python包管理工具
- 50道经典的JAVA编程题 (16-20)
- leetcode@ [274/275] H-Index &; H-Index II (Binary Search &; Array)
- 获取最外层View
- [iOS基础控件 - 3.3] 图片浏览器
- 在eclipse中使用javap工具反汇编
- pyinstaller打包第一个wxPython程序HelloWorld
- 【STL学习】map&;set