参考: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. 判断A树是否包含B树结构

    题目:输入两棵二叉树A和B,判断B是不是A的子结构 分析:根据数的遍历方法,首先想到的是采用递归的方式要更简单些,树A从根节点进行遍历,首先判断与B的根节点值是否相等,如果相等则进行递归遍历验证,否则 ...

  2. bzoj 3123 [Sdoi2013]森林(主席树,lca,启发式合并)

    Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...

  3. HDU-4627 The Unsolvable Problem 简单数学

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4627 对n除个2,然后考虑下奇偶... //STATUS:C++_AC_15MS_228KB #inc ...

  4. Xcode5和ios7下交叉编译ffmpeg

    先申明本机环境 dev-mini:ffmpeg devone$ sw_vers  ProductName:    Mac OS X ProductVersion:  BuildVersion:   1 ...

  5. 初页CTO丁乐:分布式以后还能敏捷吗? - 极客头条 - CSDN.NET

    初页CTO丁乐:分布式以后还能敏捷吗? - 极客头条 - CSDN.NET

  6. 做优步有什么旁门左道吗?No,贪小便宜会吃大亏!

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. A Tour of Go Exercise: HTTP Handlers

    Implement the following types and define ServeHTTP methods on them. Register them to handle specific ...

  8. [OC Foundation框架 - 1] 常用结构体

    底层封装是使用了typedef定义的结构体 typedef struct _NSString{ xxx xxx } NSString;   1. NSRange 结构体 #注意结构体不是对象 3种定义 ...

  9. Codeforces 390Div2-754D. Fedor and coupons(贪心+优先队列)

    D. Fedor and coupons time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

  10. Java/Andriod- 使用Eclipse搭建环境

    从网上找来的,做了一点小修改,我自己试了一下,1.3步骤我没去做,最后也不影响. 在开始Android开发之旅启动之前,首先要搭建环境,然后创建一个简单的HelloWorld.本文的主题如下: 1.环 ...