602 Stimmen

Wie bringt man ein Android-Gerät zum Vibrieren? mit unterschiedlicher Frequenz?

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

1125voto

Paresh Mayani Punkte 125623

Versuchen Sie es:

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 Datei AndroidManifest.xml aufzunehmen:

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

702voto

Vibrationserlaubnis erteilen

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

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

Stellen Sie sicher, dass Sie diese Zeile in Ihre AndroidManifest.xml-Datei aufnehmen.

Importieren der Schwingungsbibliothek

Die meisten IDEs werden dies für Sie tun, aber hier ist die Importanweisung, falls Ihre IDE dies nicht tut:

 import android.os.Vibrator;

Vergewissern Sie sich, dass dies bei der Tätigkeit geschieht, bei der die Vibration auftreten soll.

Wie man für eine bestimmte Zeit vibriert

In den meisten Fällen werden Sie das Gerät für eine kurze, vorher festgelegte Zeit vibrieren lassen wollen. Dies können Sie mit der Taste vibrate(long milliseconds) Methode. 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, ganz einfach!

Wie man unbegrenzt vibriert

Es kann sein, dass Sie möchten, dass das Gerät ununterbrochen vibriert. Hierfür verwenden wir die vibrate(long[] pattern, int repeat) Methode:

// 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 beenden, rufen Sie einfach die cancel() Methode:

v.cancel();

Verwendung von Vibrationsmustern

Wenn Sie eine individuellere Schwingung wünschen, können Sie versuchen, Ihre eigenen Schwingungsmuster zu erzeugen:

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

Es gibt mehrere SDKs, die ein umfassenderes Angebot an haptischem Feedback bieten. Eines, das ich für Spezialeffekte verwende, ist Immersion's Haptische Entwicklungsplattform für Android .

Fehlersuche

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

Zweitens: Vergewissern Sie sich, dass Sie Ihrer Anwendung die Erlaubnis erteilt haben, zu vibrieren! Gehen Sie zurück zum ersten Punkt.

110voto

Hitesh Sahu Punkte 37527

Update 2017 vibrate(interval) Methode ist mit Android-O(API 8.0) veraltet

Um alle Android-Versionen zu unterstützen, verwenden Sie diese Methode.

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

36voto

Yogesh Umesh Vaity Punkte 26562

Vibrieren ohne Erlaubnis

Wenn Sie das Gerät einfach einmal vibrieren lassen möchten, um eine Rückmeldung über eine Benutzeraktion zu geben. Sie können verwenden performHapticFeedback() Funktion einer View . Dazu braucht es nicht die VIBRATE die Erlaubnis, im Manifest angegeben zu werden.

Verwenden Sie die folgende Funktion als Top-Level-Funktion in einer allgemeinen Klasse wie Utils.kt Ihres Projekts:

/**
 * Vibrates the device. Used for providing feedback when the user performs an action.
 */
fun vibrate(view: View) {
    view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
}

Und dann verwenden Sie es überall in Ihrem Fragment o Activity wie folgt:

vibrate(requireView())

So einfach ist das!

32voto

Atul O Holic Punkte 6484

Die obigen Antworten sind perfekt. Allerdings wollte ich meine App genau zweimal auf Knopfdruck vibrieren lassen und diese kleine Information fehlt hier, daher der Beitrag für zukünftige Leser wie mich :)

Wir müssen wie oben beschrieben vorgehen und die einzige Änderung ist das Vibrationsmuster, wie unten beschrieben,

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

Dies wird genau vibrieren zweimal . Wie wir bereits wissen

  1. 0 ist für Verzögerung
  2. 100 sagt vibrieren für 100ms zum ersten Mal
  3. Als nächstes kommt Verzögerung von 1000ms
  4. und posten das vibrieren erneut für 300ms

Man kann immer wieder Verzögerung und Vibration abwechselnd erwähnen (z.B. 0, 100, 1000, 300, 1000, 300 für 3 Vibrationen und so weiter ), aber denken Sie an @Daves Wort, verwenden Sie es verantwortungsvoll :)

Beachten Sie auch hier, dass die wiederholen Der Parameter ist auf -1 gesetzt, d.h. die Vibration wird ausgelöst genau wie in der Vorlage beschrieben . :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X