【问题标题】:SOS flashlight - How toSOS手电筒 - 如何
【发布时间】:2016-10-12 20:00:53
【问题描述】:

我做了一个手电筒应用程序,现在我想添加 sos 莫尔斯电码闪烁。这是我的代码,但效果不太好,闪烁太快,所以我需要一些延迟,有人可以帮忙吗?

public void sos(View v) {
    String myString = "111000111";
    Handler handler = new Handler();


    for (int x = 0; x < myString.length(); x++) {
        if (myString.charAt(x) == '1') {
            handler.postDelayed(new Runnable() {
                public void run() {
                    params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                    camera.setParameters(params);
                    camera.startPreview();
                }
            }, 300);


            handler.postDelayed(new Runnable() {
                public void run() {
                    params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                    camera.setParameters(params);
                 }
            }, 300);


            handler.postDelayed(new Runnable() {
                public void run() {
                    params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                    camera.setParameters(params);
                }
            }, 300);

        }

    }
}

【问题讨论】:

  • 如果我了解问题所在,那么每个 Handler 都会在 300 毫秒后运行。每一个之间没有 300 毫秒的延迟。如果你想这样做,那么你需要在另一个线程的末尾启动另一个线程
  • 你能帮我做吗?我刚开始学习这个,所以我真的不能这样做
  • 您也可以使用Thread.sleep(),但这会停止应用程序的主线程
  • 我不知道该怎么做:/请帮我做
  • 为什么要使用 handler.postDelayed?我会尝试一些更简单的东西,比如 Thread.sleep()

标签: java android sos flashlight


【解决方案1】:

注意:我不是应用程序程序员,但这里是 Thread.sleep() 的示例。祝你好运。

 for (int x = 0; x < myString.length(); x++) {
    if (myString.charAt(x) == '1') {                
          params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
          camera.setParameters(params);
          camera.startPreview();
    }     
    Thread.sleep(300);      


    params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
    camera.setParameters(params);


}

【讨论】:

【解决方案2】:

第二次尝试。假设你确实不能让主线程休眠,试试这个:

int delay=0;
for (int x = 0; x < myString.length(); x++) {
    if (myString.charAt(x) == '1') {
        handler.postDelayed(new Runnable() {
                public void run() {
                    params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                    camera.setParameters(params);
                    camera.startPreview();
                }
            }, (delay+=300));


        handler.postDelayed(new Runnable() {
                public void run() {
                    params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                    camera.setParameters(params);
                 }
            }, (delay+=300));




        }

    }

【讨论】:

    猜你喜欢
    • 2021-11-15
    • 2014-06-17
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多