0

I made a flashlight app and now I want to add sos morse code flashing. This is my code for it but it doesen't work quite well, it blinks too fast so I need some kind of a delay, can anyone help?

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

        }

    }
}
Phantômaxx
  • 37,901
  • 21
  • 84
  • 115

2 Answers2

1

Note: I am not an app programmer, but here is a sample of Thread.sleep(). Good luck.

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


}
GC_
  • 448
  • 4
  • 23
  • This will likely crash the app as sleeping the main thread is bad, but it's as good a start as any. See http://stackoverflow.com/a/3039718/2308683 – OneCricketeer Oct 12 '16 at 20:31
0

Second take on it. Assuming it is true you can't sleep the main thread, try this:

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




        }

    }
GC_
  • 448
  • 4
  • 23