首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓相机闪光灯在不同的设备中以错误的间隔闪烁。

安卓相机闪光灯在不同的设备中以错误的间隔闪烁。
EN

Stack Overflow用户
提问于 2015-05-22 10:55:57
回答 4查看 1.9K关注 0票数 6

我正在开发一个应用程序,我想在其中闪烁闪光灯在特定的间隔。

以下是我所遵循的步骤。

1)设置特定时间间隔的计时器。

2)在run()方法中,我编写了TurnOn和TurnOff闪存的代码。

但在不同的器件上,闪光闪烁的间隔是不同的。所有设备的计时器时间是相同的,我也在两者之间放了一个登录,我得到了相同的值,但问题仍然存在。

这是一个硬件问题吗,因为不同设备的硬件是不同的。我也在iPhone 5s上进行了测试(通过在iOS中转换相同的代码),但是闪存比安卓快得多。

的安卓,我已经测试了Nexus 4,摩托罗拉G2,索尼Xperia,它运行良好。

问题与Nexus 5和三星Galaxy S4.有关。

编辑

计时器代码:

代码语言:javascript
复制
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);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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 )。

票数 1
EN

Stack Overflow用户

发布于 2015-06-01 14:32:21

我对手电筒和也有同样的问题,问题与计时器无关。它是关于你是如何打开和关闭闪光灯。在Nexus 5这样的设备上,您必须在布局中拥有并使用SurfaceView。向我们展示一下你打开和关闭手电筒的方法是很有用的。

票数 1
EN

Stack Overflow用户

发布于 2015-08-14 16:22:11

代码语言:javascript
复制
    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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30394886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档