2 votes

Comment faire vibrer un appareil Android pendant une longue période (par exemple 2, 5, 10 minutes) ?

J'ai passé un motif pour la vibration et -1 pour la non-répétition, mais je veux passer 10 à la place de -1 (maintenant il devrait se répéter 10 fois) alors ce motif ne se répète pas 10 fois, comment faire ?

Vibrator mVibrate = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
long pattern[]={0,800,200,1200,300,2000,400,4000};
// 2nd argument is for repetition pass -1 if you do not want to repeat the Vibrate
mVibrate.vibrate(pattern,-1);

mais je veux faire ceci mVibrate.vibrate(pattern,10); qui ne fonctionne pas.

3voto

pskink Points 15295

Qui fonctionne comme prévu, voir la documentation sur le deuxième paramètre :

répéter l'indice dans le motif auquel il faut répéter, ou -1 si vous ne voulez pas répéter.

et comme votre modèle n'a pas d'indice 10, il est simplement ignoré.

1voto

Opiatefuchs Points 3006

Il n'y a aucune possibilité dans l'API de Vibrator de faire quelque chose comme ça. Une solution possible serait de créer votre propre écouteur et de compter combien de fois il vibre lorsque le pattern[] est parcouru. Mais je n'ai aucune idée de comment faire.... peut-être est-ce possible avec un Timer qui est exactement aussi long que la somme de votre pattern[] * 10.

1voto

lustig Points 1570

Votre question est "Comment faire vibrer un appareil Android pendant une longue durée (par exemple 2, 5, 10 minutes) ?" Personne n'a vraiment répondu à votre question, alors je vais essayer. J'ai écrit le code suivant pour faire vibrer le téléphone indéfiniment :

// get a handle on the device's vibrator
// should check if device has vibrator (omitted here)
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// create our pattern for vibrations
// note that the documentation states that the pattern is as follows:
// [time_to_wait_before_start_vibrate, time_to_vibrate, time_to_wait_before_start_vibrate, time_to_vibrate, ...]

// the following pattern waits 0 seconds to start vibrating and 
// vibrates for one second
long vibratePattern[] = {0, 1000};

// the documentation states that the second parameter to the
// vibrate() method is the index of your pattern at which you
// would like to restart **AS IF IT WERE THE FIRST INDEX**

// note that these vibration patterns will index into my array,
// iterate through, and repeat until they are cancelled

// this will tell the vibrator to vibrate the device after
// waiting for vibratePattern[0] milliseconds and then
// vibrate the device for vibratePattern[1] milliseconds,
// then, since I have told the vibrate method to repeat starting
// at the 0th index, it will start over and wait vibratePattern[0] ms
// and then vibrate for vibratePattern[1] ms, and start over. It will
// continue doing this until Vibrate#cancel is called on your vibrator.
v.vibrate(pattern, 0); 

Si vous voulez faire vibrer l'appareil pendant 2, 5 ou 10 minutes, vous pouvez utiliser ce code :

// 2 minutes
v.vibrate(2 * 60 * 1000);

// 5 minutes
v.vibrate(5 * 60 * 1000);

// 10 minutes
v.vibrate(10 * 60 * 1000);

Et enfin, si vous souhaitez n'écrire qu'une seule méthode pour faire cela (comme vous devriez le faire), vous pouvez écrire ce qui suit :

public void vibrateForNMinutes(Vibrator v, int numMinutesToVibrate) {
    // variable constants explicitly set for clarity
    // milliseconds per second
    long millisPerSecond = 1000;

    // seconds per minute
    long secondsPerMinute = 60;

    v.vibrate(numMinutesToVibrate * secondsPerMinute * millisPerSecond);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X