2016-10-12 49 views
0

我做了一个手电筒应用程序,现在我想添加sos莫尔斯电码闪烁。这是我的代码,但它没有工作得很好,它闪烁得太快,所以我需要某种延迟,任何人都可以帮忙吗?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); 

     } 

    } 
} 
+0

如果我明白问题是什么,那么每个Handler在300毫秒后运行。每一个之间没有300毫秒的延迟。如果你想这样做,那么你需要在另一个线程的末尾启动另一个线程 –

+0

你可以为我做吗?我刚开始学习这个,所以我没有真正做到这一点 –

+0

你也可以使用'Thread.sleep()',但这会停止应用程序的主线程 –

回答

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); 


} 
+0

这可能会崩溃的应用程序,因为睡主线程是坏的,但它是一样好开始。见http://stackoverflow.com/a/3039718/2308683 –

+0

谢谢你帮助:D –

0

第二个承担。假设它是真的,你不能睡主线程,试试这个:

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)); 




     } 

    }