Comment faire vibrer un appareil Android?

j'ai écrit une application Android. Maintenant, je veux faire vibrer l'appareil quand une certaine action se produit. Comment puis-je faire cela?

394
demandé sur Liam George Betsworth 2012-12-19 14:32:05

9 réponses

, Essayez:

    import android.os.Vibrator;
     ...
     Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
     // Vibrate for 500 milliseconds
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            v.vibrate(VibrationEffect.createOneShot(500,VibrationEffect.DEFAULT_AMPLITUDE));
     }else{
     //deprecated in API 26 
            v.vibrate(500);
     }

Note:

N'oubliez pas d'inclure la permission dans AndroidManifest.fichier xml:

<uses-permission android:name="android.permission.VIBRATE"/>
837
répondu Paresh Mayani 2018-05-12 03:50:28

Subvention De Vibration De L'Autorisation

avant de commencer à implémenter n'importe quel code vibratoire, vous devez donner à votre application la permission de vibrer:

<uses-permission android:name="android.permission.VIBRATE"/>

assurez-vous d'inclure cette ligne dans votre AndroidManifest.fichier xml.

Importer la Vibration de la Bibliothèque

la plupart des IDEs le feront pour vous, mais voici la déclaration d'importation si la vôtre ne le fait pas:

 import android.os.Vibrator;

assurez-vous que cela dans l'activité où vous voulez que la vibration se produise.

comment vibrer pour un temps donné

dans la plupart des circonstances, vous voudrez faire vibrer l'appareil pendant une courte période prédéterminée. Vous pouvez y parvenir en utilisant la méthode vibrate(long milliseconds) . Voici un exemple rapide:

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Vibrate for 400 milliseconds
v.vibrate(400);

c'est ça, simple!

comment vibrer indéfiniment

il se peut que vous vouliez que l'appareil continue à vibrer indéfiniment. Pour cela, nous utilisons la méthode vibrate(long[] pattern, int repeat) :

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Start without a delay
// Vibrate for 100 milliseconds
// Sleep for 1000 milliseconds
long[] pattern = {0, 100, 1000};

// The '0' here means to repeat indefinitely
// '0' is actually the index at which the pattern keeps repeating from (the start)
// To repeat the pattern from any other point, you could increase the index, e.g. '1'
v.vibrate(pattern, 0);

lorsque vous êtes prêt à arrêter la vibration, appelez simplement la méthode cancel() :

v.cancel();

comment utiliser les Modèles de Vibration

si vous voulez une vibration plus sur mesure, vous pouvez essayer de créer vos propres modèles de vibration:

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Start without a delay
// Each element then alternates between vibrate, sleep, vibrate, sleep...
long[] pattern = {0, 100, 1000, 300, 200, 100, 500, 200, 100};

// The '-1' here means to vibrate once, as '-1' is out of bounds in the pattern array
v.vibrate(pattern, -1);

Vibrations Plus Complexes

il existe plusieurs SDK qui offrent une gamme plus complète de feedback haptiques. Un que j'utilise pour les effets spéciaux est plate-forme de développement haptique D'Immersion pour Android .

dépannage

si votre appareil ne vibre pas, assurez-vous d'abord qu'il peut vibrer:

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Output yes if can vibrate, no otherwise
if (v.hasVibrator()) {
    Log.v("Can Vibrate", "YES");
} else {
    Log.v("Can Vibrate", "NO");
}

Deuxièmement, s'il vous plaît assurez-vous que vous avez donné votre demande l'autorisation de vibrer! Revenir au premier point.

587
répondu Liam George Betsworth 2017-04-21 15:05:32

mise à Jour de 2017 vibrer(intervalle) la méthode est obsolète avec Android-O API(8.0)

pour prendre en charge toutes les versions Android Utilisez cette méthode.

// Vibrate for 150 milliseconds
private void shakeItBaby() {
    if (Build.VERSION.SDK_INT >= 26) {
        ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(VibrationEffect.createOneShot(150, VibrationEffect.DEFAULT_AMPLITUDE));
    } else {
        ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(150);
    }
}
36
répondu Hitesh Sahu 2017-10-26 09:03:53

j'ai eu du mal à comprendre comment faire cela lors de ma première mise en œuvre - assurez-vous que vous avez ce qui suit:

1) votre appareil supporte les vibrations (ma tablette Samsung n'a pas fonctionné donc j'ai continué à vérifier le code - le code original a fonctionné parfaitement sur mon clavier CM

2) vous avez déclaré au-dessus du niveau d'application dans votre AndroidManifest.fichier xml pour donner au code la permission de s'exécuter.

3) ont importé à la fois les éléments suivants à votre MainActivity.java avec les autres importations: import android.contenu.Cadre; import android.OS.Vibromasseur;

4) appelez votre vibration (discuté en détail dans ce fil déjà) - je l'ai fait dans une fonction séparée et appelez cela dans le code à d'autres points - selon ce que vous voulez utiliser pour appeler la vibration, vous pouvez avoir besoin d'une image ( Android: long click sur un bouton -> effectuer des actions ) ou un écouteur de bouton, ou un cliquable objet tel que défini dans XML ( image cliquable-android ):

 public void vibrate(int duration)
 {
    Vibrator vibs = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    vibs.vibrate(duration);    
 }
13
répondu mklopfer 2017-05-23 11:33:26

les réponses ci-dessus sont parfaites. Cependant, je voulais faire vibrer mon application exactement deux fois sur le bouton claquer et cette petite information est manquante ici, donc l'affichage pour les futurs lecteurs comme moi. :)

nous devons suivre comme mentionné ci-dessus et le seul changement sera dans le schéma vibratoire comme ci-dessous,

long[] pattern = {0, 100, 1000, 300};
v.vibrate(pattern, -1); //-1 is important

cela va exactement vibrer deux fois. Comme nous le savons déjà 0 est pour le retard, 100 dit vibrer pour 100MS pour la première fois, vient ensuite le retard de 1000MS et post qui vibrent à nouveau pendant 300MS.

on peut continuer et mentionner alternativement retard et vibration (par exemple 0, 100, 1000, 300, 1000, 300 pour 3 vibrations et ainsi de suite.. mais rappelez-vous les mots de @Dave utilisez-les de façon responsable. :)

notez aussi ici que le paramètre repeat est défini à -1, ce qui signifie que la vibration se produira exactement comme indiqué dans le pattern. :)

12
répondu Atul O Holic 2014-05-09 14:18:57
<uses-permission android:name="android.permission.VIBRATE"/>

doit être ajouté à l'intérieur de l'étiquette <manifest> et à l'extérieur de l'étiquette <application> .

4
répondu Sivagami Nambi 2016-11-18 06:02:35

ci-dessus réponse est très correcte, mais je donne une étape facile pour le faire:

 private static final long[] THREE_CYCLES = new long[] { 100, 1000, 1000,  1000, 1000, 1000 };

  public void longVibrate(View v) 
  {
     vibrateMulti(THREE_CYCLES);
  }

  private void vibrateMulti(long[] cycles) {
      NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
      Notification notification = new Notification();

      notification.vibrate = cycles; 
      notificationManager.notify(0, notification);
  }

puis dans votre fichier xml:

<button android:layout_height="wrap_content" 
        android:layout_width ="wrap_content" 
        android:onclick      ="longVibrate" 
        android:text         ="VibrateThrice">
</button>

C'est la façon la plus facile .

3
répondu dondondon 2018-01-17 11:43:22

j'utilise la méthode utils suivante:

public static final void vibratePhone(Context context, short vibrateMilliSeconds) {
    Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
    vibrator.vibrate(vibrateMilliSeconds);
}

ajouter la permission suivante au fichier AndroidManifest

<uses-permission android:name="android.permission.VIBRATE"/>

vous pouvez utiliser des méthodes surchargées dans le cas où vous souhaitez utiliser différents types de vibrations (patterns / indéfini) comme suggéré ci-dessus.

2
répondu Mahendra Liya 2016-11-29 08:47:54

utilisez ceci:

import android.os.Vibrator;
     ...
     Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
     // Vibrate for 1000 milliseconds
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            v.vibrate(VibrationEffect.createOneShot(1000,VibrationEffect.DEFAULT_AMPLITUDE));
     }else{
     //deprecated in API 26 
            v.vibrate(1000);
     }

Note:

N'oubliez pas d'inclure la permission dans AndroidManifest.fichier xml:

<uses-permission android:name="android.permission.VIBRATE"/>
2
répondu Prakhar Gupta 2018-05-12 06:42:21