Android 4.4:相机手电筒只闪烁几次



我已经在stackoverflow中查看了其他相机手电筒相关问题,但无法找到解决我问题的答案。手电筒闪烁6-8次,然后应用程序崩溃。这里我有一个blink()方法,它在一个循环中调用cameraon()cameraoff()。你能告诉我哪里做错了吗?我的代码可以在这里找到:http://pastebin.com/3LRMwd1Jlogcat输出如下所示:http://pastebin.com/2GTpn8Ux

我试过使用表面纹理,试图在cameraon()cameraoff()之间包括Thread.sleep(),但到目前为止没有运气。

我使用Android 4.4和最新的sdk和jdk版本。我使用nexus 5进行测试。

提前感谢!

只需在Blink()方法中使用Thread,并将您的代码放在if else

布尔tourchon = false;

Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
            for (int i = 0; i < 10; i++) {
             if(tourchon){
               cameraoff();
               tourchon=false;
             }else{
                cameraon();
               tourchon=true;
             }
         try {
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
         }
         }
        });
        thread.start();

从您的cameraOn()方法中分离相机对象的获取,因为我理解此方法应该打开闪光灯,在短时间内多次调用open()可能会导致您的问题,如本文档所示。

注意:在某些设备上,此方法可能需要较长时间才能完成。最好从工作线程(可能使用AsyncTask)调用此方法,以避免阻塞主应用程序UI线程。

让你的on和off方法改变闪光模式,因为你已经有了相机实例

看看我的代码是否有帮助:https://github.com/wolfhorse/SimpleFlashlight

它不会闪烁,但它可能是一个很好的参考。

编辑:我通过添加下面的代码修改了上面引用的SimpleFlashlight应用程序中切换按钮的onClick()事件,它在我的三星Galaxy S5上闪烁/闪烁良好,没有错误。

Thread thread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        boolean flashOn = false;
                        for (int i = 0; i < 20; i++) {
                            flashOn = !flashOn;
                            toggleFlash(flashOn);
                            try {
                                Thread.sleep(300);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                });
                thread.start();

像其他人建议的那样在新线程中包装-性能更好。

最新更新