解决闪光灯代码在Nexus5上面打不开的问题
参考: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上面打不开的问题的更多相关文章
- 除了信号触发线程与接收者线程相同的情况能直接调用到slot,其它情况都依赖事件机制(解决上面代码收不到信号的问题其实很简单,在线程的run();函数中添加一个事件循环就可以了,即加入一句exec();),信号槽不就是一个回调函数嘛
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { pThreadCon = new CSerialThread ...
- NPM 使用介绍(包管理工具,解决NodeJS代码部署上的很多问题)
引用地址:http://www.runoob.com/nodejs/nodejs-npm.html NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问 ...
- 解决java代码测试http协议505错误
代码功能:通过java代码获取网页源代码: 所用工具:Myclipse8.5+tomcat6.0+浏览器 系统环境:windows xp旗舰版 火狐浏览器版本: IE浏览器版本: 测试http协议有错 ...
- 解决:Google代码achartengine曲线代码报错问题(转)
原文地址链接 官网:http://code.google.com/p/achartengine/ 下载代码部署项目会报下面的错误: java.lang.NoClassDefFoundError: or ...
- 利用idea解决git代码冲突问题
问题描述:在开发过程中,如果你开发的代码与其他人造成冲突,在不处理的情况下会无法拉取,并且提交容易造成代码丢失: 解决方法: [此方法是同事郭富城的分享] 1,由于冲突,我们每次拉取都会失败,这时我们 ...
- 如何解决gerrit代码冲突
日常开发中,我们存在多人开发和同一个人提交多次记录的情况,这就避免不了代码冲突的情况出现. 下面介绍几种gerrit提交失败的现象,后续会根据大家遇到的情况,持续更新. 注意:出现合入不了,显示“ca ...
- 解决MyEclipse代码编辑器中汉字太小的问题
1.问题描述: 新安装的myeclipse 2014,代码编辑器中汉字很小看不清,如下图所示: 2.解决办法: 调整字体即可.通过菜单Windows——Preferences,输入font过滤选择Co ...
- 解决js代码中加入alert()就成功执行,不加就不对的问题!
问题: jquery中的$(document).ready(function(){})中调用两个方法(1)利用ajax请求去后台查图书类别的方法(2)当页面上利用图书类别去查询图书返回页面,让图书类别 ...
- 解决vue代码缩进报错问题 关闭ESlint
前言 使用vue-cli来构建单页SPA应用,提示代码缩进报错 原因分析 通过查看package.json文件我们可以发现,在文件中默认安装了eslint-loader模块,eslint-loader ...
随机推荐
- input子系统 KeyPad-Touch上报数据格式与机制
-----------------------------------------------------------------------本文系本站原创,欢迎转载!转载请注明出处:http://b ...
- HDU2015校赛 The Magic Tower
题意:两行分别是W和B的生命值,攻击值,防御值. 如果W先,W的攻击值-B的防御值大于零则B生命值减去这么多,然后该B攻击.直到谁的生命值先小与等于零则攻击的人赢. 输出写错了..... 错误代码 # ...
- 修改首页的main里面的内容
进入后台--cms--page: 找到home的页面,进入内容,可以看到右边的显示内容为: main里面的内容如下: <div class="slideshow-container&q ...
- HIbernate学习笔记(八) hibernate缓存机制
hibernate缓存 一. Session级缓存(一级缓存) 一级缓存很短和session的生命周期一致,因此也叫session级缓存或事务级缓存 hibernate一级缓存 那些方法支持一级缓存: ...
- HW6.4
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- static,interface and final
1.static: a)抽象类(abstract class):使用了 abstract 关键字所修饰的 类叫做抽象类.抽象类无法实例化,不能 new 出来一个抽象类的对象(实例). 抽象方法(abs ...
- 安装禅道项目管理软件ZenTaoPMS
服务器Ubuntu 13.04 且安装了上一篇随笔中的 AMP本文略去安装AMP过程.版本号满足要求(php>5.2 and mysql.2) 1.官网http://www.zentao.net ...
- 松下蓄电池与UPS使用和维护
使用条件及环境1.充电电流(浮充使用):0.15CA以下2.放电电流范围:0.05CA-3CA3.环境温度:0℃-40℃ (适宜的温度是25℃) 4.充电电压:(12V电池推荐值) 周围温度 ...
- JavaScript要点 (六) 函数参数
JavaScript 函数对参数的值没有进行任何的检查. 函数显式参数(Parameters)与隐式参数(Arguments) 函数的显式参数: functionName(parameter1, pa ...
- 数组和集合List的相互转化
一.数组转为List 调用Arrays类的静态方法asList static void convertArray2List() { String[] strs = new String[]{" ...