2016-10-12 3 views
0

J'ai fait une application de lampe de poche et maintenant je veux ajouter sos code morse clignotant. C'est mon code pour ça mais ça ne marche pas très bien, ça clignote trop vite alors j'ai besoin d'un peu de retard, quelqu'un peut-il m'aider?SOS lampe de poche - Comment

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

Si je comprends quel est le problème, alors chaque gestionnaire est en cours d'exécution après 300 millisecondes. Il n'y a pas un délai de 300 millisecondes entre chacun. Si vous voulez faire cela, alors vous devez commencer un autre thread à la fin d'un autre –

+0

pouvez-vous le faire pour moi? Je viens de commencer à apprendre ceci, donc je ne suis pas vraiment capable de faire ça –

+0

Vous pouvez aussi utiliser Thread.sleep() ', mais cela arrêtera le thread principal de l'application –

Répondre

1

Remarque: Je ne suis pas un programmeur d'application, mais voici un exemple de Thread.sleep(). Bonne chance.

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

Cela va probablement bloquer l'application car dormir le thread principal est mauvais, mais c'est un bon début comme tout. Voir http://stackoverflow.com/a/3039718/2308683 –

+0

merci cela a aidé: D –

0

Deuxième prise sur elle. En supposant qu'il est vrai que vous ne pouvez pas dormir le fil principal, essayez ceci:

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




     } 

    }