Android-关于android调用闪光灯的问题

发布于 2016-12-03 21:48:01 字数 453 浏览 1563 评论 4

目前,有个项目,需要将手机背后的闪光灯打开,当做照明的作用(当然是硬件支持的情况下)。
实现如下:
Camera.Parameters parameters=camera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
camera.setParameters(parameters);
camera.takePicture(shutterCallBack, null, jpegCallBack);

问题是,可以打开闪光灯,但是只是一瞬间,相当于一个拍照。就结束了,但如果不调用
takePicture方法,又不能打开闪光灯。
求解:怎么在不调用拍照的情况下,长期打开闪光灯。(实在解决不了,拍照也可以,关键是如何长期打开闪光灯)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

晚风撩人 2017-04-30 06:28:27

//mCamera为Camera对象,下面的是拍照方法。
mCamera.takePicture(null, null, null, jpegCallback);

//拍照时,开启闪光灯
Camera.Parameters parameters = mCamera.getParameters();

parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
mCamera.setParameters(parameters)

注意:需要开启闪光灯的权限,摄像头权限:

<!-- 打开Camera的权限 -->
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.autofocus"/>

<!-- 开启闪光灯权限 -->
<uses-permission android:name="android.permission.FLASHLIGHT"/>

虐人心 2017-03-13 22:40:14

package com.wjh.myset;

import java.io.PrintStream;
import java.lang.reflect.Method;

import android.os.IBinder;

public class MyFlashLight {
private Object svc = null;
private Method getFlashlightEnabled = null;
private Method setFlashlightEnabled = null;

@SuppressWarnings("unchecked")
public MyFlashLight() throws Exception{
try {
// call ServiceManager.getService("hardware") to get an IBinder for the service.
// this appears to be totally undocumented and not exposed in the SDK whatsoever.
Class sm = Class.forName("android.os.ServiceManager");
Object hwBinder = sm.getMethod("getService", String.class).invoke(null, "hardware");

// get the hardware service stub. this seems to just get us one step closer to the proxy
Class hwsstub = Class.forName("android.os.IHardwareService$Stub");
Method asInterface = hwsstub.getMethod("asInterface", android.os.IBinder.class);
svc = asInterface.invoke(null, (IBinder) hwBinder);

// grab the class (android.os.IHardwareService$Stub$Proxy) so we can reflect on its methods
Class proxy = svc.getClass();

// save methods
getFlashlightEnabled = proxy.getMethod("getFlashlightEnabled");
setFlashlightEnabled = proxy.getMethod("setFlashlightEnabled", boolean.class);
}
catch(Exception e) {
throw new Exception("LED could not be initialized");
}
}

public boolean isEnabled() {
try {
return getFlashlightEnabled.invoke(svc).equals(true);
}
catch(Exception e) {
return false;
}
}

public void enable(boolean tf) {
try {
setFlashlightEnabled.invoke(svc, tf);
}
catch(Exception e) {}
}

}

代码来自于http://code.google.com/p/search-light/
不同类别的手机开启闪光灯的方法不一定相同,下面的代码适用于mb525,其他的手机我还没有试过.

晚风撩人 2017-01-30 19:18:41

这个基本上不同手机厂家的做法都是有区别的,需要驱动层的支持,有的厂家的手机不直接支持这个功能,可以在adb中用下面的命令确定:

打开闪光灯:
echo 1 > /sys/class/leds/spotlight/brightness
关闭闪光灯:
echo 0 > /sys/class/leds/spotlight/brightness

如果不存在spotlight这个节点那么该手机需要打开camera才能支持闪光灯的常亮了。

虐人心 2017-01-19 05:04:59

不同设备好像有差异,试一试下面的代码

Camera cam;
void ledon() {
cam = Camera.open();
Parameters params = cam.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_ON);
cam.setParameters(params);
cam.startPreview();
cam.autoFocus(new AutoFocusCallback() {
public void onAutoFocus(boolean success, Camera camera) {
}
});
}

void ledoff() {
cam.stopPreview();
cam.release();
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文