Quelqu'un peut-il me dire comment vibrer le même motif 5 fois comme celui-ci mon modèle
Je veux ce modèle pour répéter 5 fois p> long [] modèle = {0, 200, 500}; Code>
9 Réponses :
Votre code devrait faire le tour. Assurez-vous simplement que vous avez
androidmanifest.xml code> fichier. p>
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
J'ai trouvé la solution, c'était très simple:
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 (...) Code> 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 code> . Tout fait selon la documentation.
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(); } }
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! i> b> Pas besoin de lancer des boucles pour réaliser la répétition du vibrateur
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(); } }
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. P> blockQuote>
Vous devez indirect index 0 p>
xxx pré> p>
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);
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)); } }
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();
Les crochets et les parens ne sont pas équilibrés ici, sont-ils?
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);
OK, ce code fonctionne-t-il? L'as tu essayé?