10
votes

Comment vibrer l'appareil N Nombre de fois par programmation dans Android?

Quelqu'un peut-il me dire comment vibrer le même motif 5 fois comme celui-ci mon modèle

long [] modèle = {0, 200, 500};

Je veux ce modèle pour répéter 5 fois xxx


1 commentaires

OK, ce code fonctionne-t-il? L'as tu essayé?


9 Réponses :


3
votes

Votre code devrait faire le tour. Assurez-vous simplement que vous avez dans le fichier androidmanifest.xml fichier.


2 commentaires

c'est déjà en train de travailler mais je ne sais pas comment vibrer le nombre de fois comme si Sélectionnez 5 sur Runtime, alors il devrait vibrer 5 fois ...


pour (int i = 0; i



21
votes

J'ai trouvé la solution, c'était très simple: xxx


3 commentaires

Ressemble à un hack ^^


Great Hack Nice :)


Pourquoi est-ce un piratage? Il existe un paramètre de modèle et il y a un certain nombre de paramètres répétitifs. Vibrate (...) Documentation de la méthode dit Pour que le motif de répétition, transmettez l'index dans le réseau de motifs sur lequel démarrer la répétition, ou -1 pour désactiver la répétition . Tout fait selon la documentation.



4
votes

Les œuvres suivantes pour moi:

if(vibration_enabled) {
    final Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    if(v.hasVibrator()) {
        final long[] pattern = {0, 1000, 1000, 1000, 1000};
        new Thread(){
            @Override
            public void run() {
                for(int i = 0; i < 5; i++){ //repeat the pattern 5 times
                    v.vibrate(pattern, -1);
                    try {
                       Thread.sleep(4000); //the time, the complete pattern needs
                    } catch (InterruptedException e) {
                        e.printStackTrace();  
                    }
                }
            }
        }.start();
    }
}


3 commentaires

Ressemble à un autre hack. Quel est le deuxième argument de la méthode vibrate () pour?


Documentation pour la méthode Vibrate , Deuxième ARG: Répéter le compte, - 1 signifie ne pas répéter


mauvaise pratique! Pas besoin de lancer des boucles pour réaliser la répétition du vibrateur



2
votes

Outre les solutions données ci-dessus, j'ai créé mon propre modèle de vibration où je peux contrôler la taille de la durée entre les vibrations. STARTVIBRATION () Crée un motif de vibration régulier continu pendant une minute.

STOCTIONVIBRATION () - Terminte la vibration ou fait une pause Le compteur de vibration entraînant ainsi le motif de vibration. P>

private time = 0;
private countDownTimer;

private void startVibration() {
    time = (int) System.currentTimeMillis();

    countDownTimer = new CountDownTimer(60000, 1000) {

        public void onTick(long millisUntilFinished) {

            time = (int) (millisUntilFinished / 1000);
            int[] timeLapse = {58, 55, 52, 49, 46, 43, 40, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1};
            for (int k = 0; k < timeLapse.length; k++) {
                if (time == timeLapse[k]) {
                    ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(1000);
                }
            }
        }

        public void onFinish() {
        }
    }.start();
}

private void stopVibration() {
    if (countDownTimer != null) {
        countDownTimer.cancel();
    }
}


0 commentaires

4
votes

de: Android Vibromator # Vibration (long [], int)

Pour que le motif se répète, transmettez l'index dans la matrice de motif sur laquelle vous devez démarrer la répétition, ou -1 pour désactiver la répétition.

Vous devez indirect index 0 xxx


0 commentaires

0
votes

Dans la méthode VIBAL PUBLIQUE VIBRATE Vibrate (longue [Modèle [] [[], répétez) I>, le modèle long [] i> suit la règle suivante: long [] modèle = {pausetime1, VibrationTime1, pausetime2, vibrationtime2, pausetime3, vibrationTime3, ...} de sorte que vous avez un nombre impair de valeurs, cela ne fonctionnera pas. Vous devez devoir mettre fin au motif avec un temps de vibration. Un nombre pair de valeur fait le travail (au moins 4 valeurs).

long[] pattern = {0, 500, 200, 500}
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(pattern , 5);


0 commentaires

0
votes

Voici comment je l'ai fait. Je génère de manière dynamique mon tableau de synchronisation basé sur le nombre de fois que l'appelant veut qu'il vibre. Dans la boucle, commencez à 1 afin d'éviter 0% 2, entraînant un retard supplémentaire inutile à la fin.

private void vibrate(int times)
{
    Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
    {
        ArrayList<Long> timings = new ArrayList();

        timings.add(0L);

        for(int i = 1; i <= times; i ++)
        {

            if(i%2==0)
                timings.add(0L);

            timings.add(250L);


        }

        long[] arrTimings = new long[timings.size()];

        for(int j = 0; j < timings.size(); j++)
        {
            arrTimings[j] = timings.get(j);
        }

        vibrator.vibrate(VibrationEffect.createWaveform(arrTimings, -1));
    }
}


0 commentaires

0
votes
    long vibrationDuration = Arrays.stream(pattern).sum();
    new CountDownTimer(vibrationDuration*(repeat+1), vibrationDuration) {

        @Override
        public void onTick(long millisUntilFinished) {
            v.cancel();
            if (Build.VERSION.SDK_INT >= 26) {
                VibrationEffect vibrationEffect = VibrationEffect.createWaveform(pattern, -1);
                v.vibrate(vibrationEffect);
            } else {
                v.vibrate(pattern, -1);
            }
        }

        @Override
        public void onFinish() {
            v.cancel();
        }
    }.start();

1 commentaires

Les crochets et les parens ne sont pas équilibrés ici, sont-ils?



0
votes

Vous pouvez appliquer une truc, construire une dynamique de modèle basée sur le nombre de répétitions que vous souhaitez.

long[] pattern = { 0, 200, 500 };
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(createVibrationPattern(pattern , 2);


0 commentaires