web-dev-qa-db-fra.com

Comment faire vibrer un appareil Android?

J'ai écrit une application Android. Maintenant, je veux faire vibrer l'appareil lorsqu'une action donnée se produit. Comment puis-je faire ceci?

450
Billie

Essayer:

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 le fichier AndroidManifest.xml:

<uses-permission Android:name="Android.permission.VIBRATE"/>
915
Paresh Mayani

Accorder l'autorisation de vibration

Avant de commencer à implémenter un code de vibration, vous devez autoriser votre application à vibrer:

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

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

Importer la bibliothèque de vibrations

La plupart des IDE 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 ceci est dans l'activité où vous voulez que la vibration se produise.

Comment vibrer pour un temps donné

Dans la plupart des cas, vous souhaiterez faire vibrer l'appareil pendant une courte durée 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 souhaitiez 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 motifs de vibration

Si vous voulez une vibration plus personnalisée, 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 kits SDK offrant une gamme plus complète de retour haptique. Celui que j'utilise pour les effets spéciaux est Plate-forme de développement Haptic pour Android d'Ammersion .

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, assurez-vous que vous avez donné à votre application l'autorisation de vibrer! Reportez-vous au premier point.

625

La méthode Update 2017 vibrate (interval) 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);
    }
}

Kotlin:

// Vibrate for 150 milliseconds
private fun shakeItBaby(context: Context) {
    if (Build.VERSION.SDK_INT >= 26) {
        (context.getSystemService(VIBRATOR_SERVICE) as Vibrator).vibrate(VibrationEffect.createOneShot(150, VibrationEffect.DEFAULT_AMPLITUDE))
    } else {
        (context.getSystemService(VIBRATOR_SERVICE) as Vibrator).vibrate(150)
    }
}
60
Hitesh Sahu

Les réponses ci-dessus sont parfaites. Cependant, je voulais faire vibrer mon application deux fois exactement au clic du bouton. Cette petite information manque ici, donc je la poste pour les futurs lecteurs comme moi. :)

Nous devons suivre comme mentionné ci-dessus et le seul changement sera dans le motif de vibration 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 correspond au délai, 100 indique une vibration pour 100 MS pour la première fois, puis un délai de 1000 MS et un post qui vibre à nouveau pour 300 MS.

On peut continuer à mentionner le délai et les vibrations alternativement (par exemple 0, 100, 1000, 300, 1000, 300 pour 3 vibrations, etc.), mais rappelez-vous que @ Dave's Word l'utilise de manière responsable. :)

Notez également ici que le paramètre de répétition est défini sur -1, ce qui signifie que la vibration se produira exactement comme indiqué dans le modèle. :)

15
Atul O Holic

J'ai eu du mal à comprendre comment faire cela lors de ma première implémentation - assurez-vous que vous disposez des éléments suivants:

1) Votre appareil prend en charge les vibrations (ma tablette Samsung ne fonctionnant pas, j'ai revérifié le code: le code d'origine fonctionnait parfaitement sur mon pavé tactile CM.)

2) Vous avez déclaré au-dessus du niveau de l'application dans votre fichier AndroidManifest.xml pour autoriser le code à s'exécuter.

3) ont importé les deux éléments suivants dans votre MainActivity.Java avec les autres importations: import Android.content.Context; importer Android.os.Vibrator;

4) Appelez votre vibration (nous en avons déjà beaucoup parlé dans ce fil) - je l’ai fait dans une fonction distincte et je l’appelle dans le code à d’autres points - en fonction de ce que vous voulez utiliser pour appeler la vibration, vous pourriez avoir besoin d’une image (- Android: clic long sur un bouton -> effectuer des actions ) ou un écouteur de bouton, ou un objet cliquable tel que défini en XML ( Image cliquable - Android ):

 public void vibrate(int duration)
 {
    Vibrator vibs = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    vibs.vibrate(duration);    
 }
14
mklopfer
<uses-permission Android:name="Android.permission.VIBRATE"/>

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

5
Sivagami Nambi

La réponse ci-dessus est très correcte mais je donne une étape facile à 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);
  }

Et 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 le le plus facile moyen.

4
dondondon

J'utilise la méthode suivante:

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

Ajouter l'autorisation suivante au fichier AndroidManifest

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

Vous pouvez utiliser des méthodes surchargées au cas où vous souhaiteriez utiliser différents types de vibrations (motifs/indéfinis) comme suggéré ci-dessus.

3
Mahendra Liya

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

Remarque:

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

<uses-permission Android:name="Android.permission.VIBRATE"/>
2
Prakhar Gupta

Vibrant dans Patterns/Waves:

import Android.os.Vibrator;
...
// Vibrate for 500ms, pause for 500ms, then start again
private static final long[] VIBRATE_PATTERN = { 500, 500 };

mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // API 26 and above
    mVibrator.vibrate(VibrationEffect.createWaveform(VIBRATE_PATTERN, 0));
} else {
    // Below API 26
    mVibrator.vibrate(VIBRATE_PATTERN, 0);
}

Plus

L'autorisation nécessaire dans AndroidManifest.xml:

<uses-permission Android:name="Android.permission.VIBRATE"/>
2
Maksim Ivanov

Vous pouvez faire vibrer l'appareil et son travail

   Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
           v.vibrate(100);

L'autorisation est nécessaire mais pas sur l'autorisation d'exécution requise

<uses-permission Android:name="Android.permission.VIBRATE"/>
0
Ahmad