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?
Antworten
Zu viele Anzeigen?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"/>
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.
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)
}
}
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!
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
- 0 ist für Verzögerung
- 100 sagt vibrieren für 100ms zum ersten Mal
- Als nächstes kommt Verzögerung von 1000ms
- 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 . :)
- See previous answers
- Weitere Antworten anzeigen