参考: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

最新文章

  1. C# 利用占位符替换word中的字符串和添加图片
  2. android Unhandled exception type ParseException提示报错
  3. css-关于absolute和relative的一些笔记
  4. 用CSS让未知高度内容垂直方向居中
  5. Asm Shader Reference --- Shader Model 2.0 part
  6. mousewheel 与 DOMMouseScroll
  7. C++ 头文件系列(array)
  8. 基于swift MKMapkit 开发的地图定位导航
  9. MyBatis物理分页的代码实现
  10. input type=file 上传文件样式美化(转载)
  11. 关于pycharm中使用charts无法显示图表的问题(属于个人粗心问题)
  12. 第6章 Selenium2-Java 自动化测试模型
  13. sublime 可能卡的原因
  14. for&while循环
  15. 框架: require.js
  16. 【转】ABP webapi三种方式
  17. 深入了解preventDefault与stopPropagation
  18. [.NET] 使用VALIDATIONCONTEXT快速进行模型资料的验证 》简单xml创建-json转xml
  19. JUC线程池之 ThreadPoolExecutor简介
  20. 查看shell环境下,网络是否连通-curl/ping

热门文章

  1. 傲游浏览器4,傲游浏览器5如何一键批量打开url链接。
  2. bzoj 1833 [ZJOI2010]count 数字计数(数位DP)
  3. python包管理工具
  4. 50道经典的JAVA编程题 (16-20)
  5. leetcode@ [274/275] H-Index & H-Index II (Binary Search & Array)
  6. 获取最外层View
  7. [iOS基础控件 - 3.3] 图片浏览器
  8. 在eclipse中使用javap工具反汇编
  9. pyinstaller打包第一个wxPython程序HelloWorld
  10. 【STL学习】map&set