我正在开发一个应用程序,我想在其中闪烁闪光灯在特定的间隔。
以下是我所遵循的步骤。
1)设置特定时间间隔的计时器。
2)在run()方法中,我编写了TurnOn和TurnOff闪存的代码。
但在不同的器件上,闪光闪烁的间隔是不同的。所有设备的计时器时间是相同的,我也在两者之间放了一个登录,我得到了相同的值,但问题仍然存在。
这是一个硬件问题吗,因为不同设备的硬件是不同的。我也在iPhone 5s上进行了测试(通过在iOS中转换相同的代码),但是闪存比安卓快得多。
的安卓,我已经测试了Nexus 4,摩托罗拉G2,索尼Xperia,它运行良好。。
问题与Nexus 5和三星Galaxy S4.有关。
编辑
计时器代码:
long delayLong = 200;
long timerValueLong = 500;
Timer timer;
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if (!mLightOn) {
turnOnFlash();
} else {
turnOffFlash();
}
}
}, delayLong, timerValueLong);发布于 2016-09-18 09:41:45
这是一个较老的问题,但问题仍然存在,所以我将张贴我如何解决这个问题。
问题是,打开或关闭LED的调用需要不同的时间来遍历Android操作系统。这些电话的处理方式与电话有关。
首先,你需要测量LED打开和关闭所需的时间,从通话开始。使用从相机输入,保持手机靠近一个表面和测量变化的亮度在框架内。如果使用glReadPixels,则可以使用OpenGL,并且只读取每个帧的中心线。您将需要进行多个度量,因为根据操作系统的状态,调用可以更短,也可以更长。最好没有缓冲区或固定的帧缓冲区,因此帧的定时是可靠的(压缩时可能不是这样)。我使用了OpenGL和SurfaceTexture,这是一种快速的方式。
您现在知道了调用遍历操作系统所需的最小(1)和最大(2)时间。使用这些信息,您可以使LED闪烁尽可能快的电话。要真正最大限度地利用它,在最大(2)时间过去之前启动对闪存的第二次调用;最大(2)-最小(1)。
使用最后一个技巧,闪烁的速度在很大程度上取决于调用遍历的最小和最大时间的差异。这通常是非常不同的每部手机,从10毫秒到100ms+。
还请注意,由于调用遍历时间的测量发生在摄像机上,所以时间被向上/向下舍入到33 up段(@30 are )。
发布于 2015-06-01 14:32:21
我对手电筒和也有同样的问题,问题与计时器无关。它是关于你是如何打开和关闭闪光灯。在Nexus 5这样的设备上,您必须在布局中拥有并使用SurfaceView。向我们展示一下你打开和关闭手电筒的方法是很有用的。
发布于 2015-08-14 16:22:11
long delayLong = 20;
long timerValueLong = 100;
Timer timer;
final Parameters p = camera.getParameters();
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if (!isLighOn) {
p.setFlashMode(Parameters.FLASH_MODE_ON);
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(p);
isLighOn = true;
} else {
p.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(p);
isLighOn = false;
}
}
}, delayLong, timerValueLong);https://stackoverflow.com/questions/30394886
复制相似问题