像SOSModule这样的选项不起作用



我正在尝试创建像SOS模块一样创建选项,我创建代码来处理此操作:

class SOSModule {
private Camera camera;
private Camera.Parameters params;
private boolean isFlashOn;
void blink(final int delay, final int times) {
    Thread t = new Thread() {
        public void run() {
            try {
                for (int i=0; i < times*2; i++) {
                    if (isFlashOn) {
                        turnOffFlash();
                    } else {
                        Camera.open();
                        turnOnFlash();
                    }
                    sleep(delay);
                }
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    };
    t.start();
}
void turnOnFlash() {
    if (!isFlashOn) {
        if (camera == null || params == null) {
            return;
        }
        params = camera.getParameters();
        params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
        camera.setParameters(params);
        camera.startPreview();
        isFlashOn = true;
    }
}
void turnOffFlash() {
    if (isFlashOn) {
        if (camera == null || params == null) {
            return;
        }
        params = camera.getParameters();
        params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
        camera.setParameters(params);
        camera.stopPreview();
        isFlashOn = false;
    }
}

}

我还在清单中添加了所有必需的权限,当然我会按时检查使用权限。

但这没有工作。我只是创建其他代码,但像"一个闪光灯"一样工作。

你们能帮我吗?

伙计们,这对我很重要,我不能这样做,因为我的华为P8 Lite和p9 Lite在发生这种情况时不会出现任何错误,这是一个华为软件问题,使用相机我需要在心理设备上进行测试,这是一个很大的我没有设备的日志的问题。

  public void flash_effect() throws InterruptedException
{
    cam = Camera.open();
    final Camera.Parameters p = cam.getParameters();
    p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);

    Thread a = new Thread()
    {
        public void run()
        {
            for(int i =0; i < 10; i++)
            {
                cam.setParameters(p);
                cam.startPreview();
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                cam.stopPreview();
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    };
    a.start();
}}

此代码有效,但是Flash可以为无限而开放,没有任何眨眼效果任何想法??

您需要一个标志,告诉您的线程何时停止。

boolean shouldStop = false;
    while (!shouldStop){
      if(FlashOn){
        ...//do SOS stuff
      }
    }
    public void endSOS(){
      shouldStop = true;
    }

是因为您的线程运行未被称为

尝试这个

 void blink(final int delay, final int times) {
    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                for (int i=0; i < times*2; i++) {
                    if (isFlashOn) {
                        turnOffFlash();
                    } else {
                        turnOnFlash();
                    }
                    Thread.sleep(delay);
                }
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    });
    t.start();
}

您可以在此处阅读更多

线程:不调用运行方法

相关内容

  • 没有找到相关文章

最新更新