wake-up-neo.com

Wie lässt man ein Android Gerät vibrieren?

Ich habe eine Android Anwendung geschrieben. Jetzt möchte ich das Gerät vibrieren lassen, wenn eine bestimmte Aktion auftritt. Wie kann ich das machen?

450
Billie

Versuchen:

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

Anmerkung:

Vergessen Sie nicht, die Berechtigung in die AndroidManifest.xml-Datei aufzunehmen:

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

Erteilen Sie die Vibration Permission

Bevor Sie mit der Implementierung eines Vibrationscodes beginnen, müssen Sie Ihrer Anwendung die Erlaubnis zum Vibrieren erteilen:

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

Stellen Sie sicher, dass diese Zeile in Ihrer AndroidManifest.xml-Datei enthalten ist.

Importieren Sie die Vibrationsbibliothek

Die meisten IDEs erledigen dies für Sie, aber hier ist die Importanweisung, falls Ihre nicht:

 import Android.os.Vibrator;

Stellen Sie dies in der Aktivität sicher, in der die Vibration auftreten soll.

Wie man für eine bestimmte Zeit vibriert

In den meisten Fällen möchten Sie das Gerät für eine kurze, festgelegte Zeitspanne vibrieren. Dies erreichen Sie mit der Methode vibrate(long milliseconds). Hier ist ein kurzes Beispiel:

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

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

Das war's einfach!

Wie man auf unbestimmte Zeit vibriert

Es kann vorkommen, dass das Gerät auf unbestimmte Zeit weiter vibrieren soll. Dazu verwenden wir die Methode 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);

Wenn Sie bereit sind, die Vibration zu stoppen, rufen Sie einfach die Methode cancel() auf:

v.cancel();

Verwendung von Vibrationsmustern

Wenn Sie eine maßgeschneiderte Vibration wünschen, können Sie versuchen, Ihre eigenen Vibrationsmuster zu erstellen:

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

Komplexere Vibrationen

Es gibt mehrere SDKs, die ein umfassenderes Angebot an haptischem Feedback bieten. Eine, die ich für Spezialeffekte verwende, ist Immersions Haptic Development Platform für Android .

Fehlerbehebung

Wenn Ihr Gerät nicht vibriert, stellen Sie zunächst sicher, dass es vibrieren kann:

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

Stellen Sie zweitens sicher, dass Sie Ihrer Anwendung die Erlaubnis zum Vibrieren erteilt haben! Zurück zum ersten Punkt.

625

pdate 2017 vibrieren (Intervall) -Methode ist mit Android-O (API 8.0) veraltet

Verwenden Sie diese Methode, um alle Android Versionen zu unterstützen.

// 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

Die obigen Antworten sind perfekt. Ich wollte meine App jedoch genau zweimal per Knopfdruck vibrieren lassen, und diese kleinen Informationen fehlen hier, sodass sie für zukünftige Leser wie mich veröffentlicht werden. :)

Wir müssen wie oben erwähnt folgen und die einzige Änderung wird im Vibrationsmuster wie unten sein,

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

Dies wird genau zweimal vibrieren. Wie wir bereits wissen, ist 0 für Verzögerung, 100 sagt zum ersten Mal für 100MS vibrieren, das nächste Mal kommt Verzögerung von 1000MS und Post, die erneut für 300MS vibrieren.

Man kann weiterhin alternativ Verzögerung und Vibration erwähnen (z. B. 0, 100, 1000, 300, 1000, 300 für 3 Vibrationen usw.), aber denken Sie daran, dass @ Dave's Word es verantwortungsbewusst verwendet. :)

Beachten Sie auch hier, dass der Wiederholungsparameter auf -1 eingestellt ist, was bedeutet, dass die Vibration genau wie im Muster angegeben erfolgt. :)

15
Atul O Holic

Bei meiner ersten Implementierung hatte ich Probleme zu verstehen, wie das geht. Stellen Sie sicher, dass Sie Folgendes haben:

1) Ihr Gerät unterstützt Vibrationen (mein Samsung-Tablet hat nicht funktioniert, daher habe ich den Code immer wieder überprüft - der ursprüngliche Code hat auf meinem CM Touchpad einwandfrei funktioniert

2) Sie haben in Ihrer AndroidManifest.xml-Datei die Anwendungsebene überschritten, um dem Code die Berechtigung zum Ausführen zu erteilen.

3) Haben Sie beide der folgenden Dateien mit den anderen Importen in MainActivity.Java importiert: import Android.content.Context; Android.os.Vibrator importieren;

4) Rufe deine Vibration auf (in diesem Thread bereits ausführlich besprochen) - Ich habe es in einer separaten Funktion gemacht und dies im Code an anderen Stellen aufgerufen - je nachdem, was du verwenden möchtest, um die Vibration aufzurufen, brauchst du möglicherweise ein Bild (- Android: Langes Klicken auf eine Schaltfläche -> Aktionen ausführen ) oder Schaltflächen-Listener oder ein in XML definiertes anklickbares Objekt ( anklickbares Bild - 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"/>

sollte innerhalb des Tags <manifest> und außerhalb des Tags <application> hinzugefügt werden.

5
Sivagami Nambi

Die obige Antwort ist sehr richtig, aber ich gebe einen einfachen Schritt, um es zu tun:

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

Und dann in deiner XML-Datei:

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

Das ist der einfachste Weg.

4
dondondon

Ich benutze die folgende utils Methode:

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

Fügen Sie der AndroidManifest-Datei die folgende Berechtigung hinzu

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

Sie können überladene Methoden verwenden, wenn Sie verschiedene Arten von Vibrationen (Muster/unbestimmt) verwenden möchten, wie oben vorgeschlagen.

3
Mahendra Liya

Benutze das:

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

Hinweis:

Vergessen Sie nicht, die Berechtigung in die AndroidManifest.xml-Datei aufzunehmen:

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

Vibrieren in Muster/Wellen:

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

Die notwendige Erlaubnis in AndroidManifest.xml:

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

Sie können das Gerät und seine Arbeit vibrieren lassen

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

Eine Erlaubnis ist erforderlich, aber keine Erlaubnis zur Laufzeit

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