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

解决闪光灯代码在Nexus5上面打不开的问题的更多相关文章

  1. 除了信号触发线程与接收者线程相同的情况能直接调用到slot,其它情况都依赖事件机制(解决上面代码收不到信号的问题其实很简单,在线程的run();函数中添加一个事件循环就可以了,即加入一句exec();),信号槽不就是一个回调函数嘛

    MainWindow::MainWindow(QWidget *parent) :   QMainWindow(parent)   {   pThreadCon = new CSerialThread ...

  2. NPM 使用介绍(包管理工具,解决NodeJS代码部署上的很多问题)

    引用地址:http://www.runoob.com/nodejs/nodejs-npm.html NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问 ...

  3. 解决java代码测试http协议505错误

    代码功能:通过java代码获取网页源代码: 所用工具:Myclipse8.5+tomcat6.0+浏览器 系统环境:windows xp旗舰版 火狐浏览器版本: IE浏览器版本: 测试http协议有错 ...

  4. 解决:Google代码achartengine曲线代码报错问题(转)

    原文地址链接 官网:http://code.google.com/p/achartengine/ 下载代码部署项目会报下面的错误: java.lang.NoClassDefFoundError: or ...

  5. 利用idea解决git代码冲突问题

    问题描述:在开发过程中,如果你开发的代码与其他人造成冲突,在不处理的情况下会无法拉取,并且提交容易造成代码丢失: 解决方法: [此方法是同事郭富城的分享] 1,由于冲突,我们每次拉取都会失败,这时我们 ...

  6. 如何解决gerrit代码冲突

    日常开发中,我们存在多人开发和同一个人提交多次记录的情况,这就避免不了代码冲突的情况出现. 下面介绍几种gerrit提交失败的现象,后续会根据大家遇到的情况,持续更新. 注意:出现合入不了,显示“ca ...

  7. 解决MyEclipse代码编辑器中汉字太小的问题

    1.问题描述: 新安装的myeclipse 2014,代码编辑器中汉字很小看不清,如下图所示: 2.解决办法: 调整字体即可.通过菜单Windows——Preferences,输入font过滤选择Co ...

  8. 解决js代码中加入alert()就成功执行,不加就不对的问题!

    问题: jquery中的$(document).ready(function(){})中调用两个方法(1)利用ajax请求去后台查图书类别的方法(2)当页面上利用图书类别去查询图书返回页面,让图书类别 ...

  9. 解决vue代码缩进报错问题 关闭ESlint

    前言 使用vue-cli来构建单页SPA应用,提示代码缩进报错 原因分析 通过查看package.json文件我们可以发现,在文件中默认安装了eslint-loader模块,eslint-loader ...

随机推荐

  1. Jquery Ajax 异步设置Table中某列的值

    可根据table中某列中的ID去改变某列的值! 只是参考,实际应用中不能这样做的,如果有很多行,频繁访问服务器,服务器是顶不住的! JS: $(document).ready(function () ...

  2. 【UR #12】实验室外的攻防战(BIT)

    [题目链接] http://uoj.ac/problem/180 [题意] 给定两个1..n的排列AB,只有当ai<ai+1才能交换ai和ai+1,问是否能够将A转换为B. [思路] 令a[i] ...

  3. python的动态与解释

    python是一门动态解释型语言.为了理解"动态"和"解释",前几天都在看<Python源码剖析>,以下是自己的一些总结. 先说解释,除开py2ex ...

  4. 纯CSS3实现的图片滑块程序,效果非常酷

    接下来我们一起来分析一下源码,首先是HTML代码,非常简单: <div id="gal"> <nav class="galnav"> & ...

  5. python 定义函数

    在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 我们以自定义一个求绝对值的my_abs函数 ...

  6. keil编译STM32工程时 #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"

    我们可以双击错误,然后会自动定位到文件 stm32f10x.h 中出错的地方,可以看到代码: #if !defined (STM32F10X_LD) && !defined (STM3 ...

  7. hdu 3617 Happy 2009

    Happy 2009 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. nyoj 975 关于521

    关于521 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 Acm队的流年对数学的研究不是很透彻,但是固执的他还是想一头扎进去. 浏览网页的流年忽然看到了网上有人用玫 ...

  9. 转载SSIS中的容器和数据流—数据转换(Transformations)

    对数据流来说按照需求将数据转换成需要的格式是数据操作中的一个关键的步骤.例如想要得到聚合排序后的运算结果,转换可以实现这种操作.和SQL Server 2000 DTS完全不同,这些操作不需要编写sc ...

  10. win2008下c#调用directshow问题

    打开摄像头时报错 网上查 说缺少qedit.dll,下载后注册也不行. 最后安装暴风影音,测试ok