Jawaban:
Mencoba:
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);
}
catatan:
Jangan lupa untuk menyertakan izin dalam file AndroidManifest.xml:
<uses-permission android:name="android.permission.VIBRATE"/>
vibrate(VibrationEffect)
saja.
Sebelum Anda mulai menerapkan kode getaran apa pun, Anda harus memberi izin pada aplikasi Anda untuk bergetar:
<uses-permission android:name="android.permission.VIBRATE"/>
Pastikan untuk memasukkan baris ini dalam file AndroidManifest.xml Anda.
Sebagian besar IDE akan melakukan ini untuk Anda, tetapi ini adalah pernyataan impor jika Anda tidak:
import android.os.Vibrator;
Pastikan ini dalam aktivitas di mana Anda ingin getaran terjadi.
Dalam sebagian besar keadaan, Anda ingin menggetarkan perangkat untuk waktu yang singkat dan telah ditentukan sebelumnya. Anda dapat mencapai ini dengan menggunakan vibrate(long milliseconds)
metode ini. Ini adalah contoh cepat:
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 400 milliseconds
v.vibrate(400);
Itu dia, sederhana!
Mungkin Anda ingin perangkat terus bergetar tanpa batas. Untuk ini, kami menggunakan vibrate(long[] pattern, int repeat)
metode:
// 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);
Saat Anda siap untuk menghentikan getaran, panggil saja cancel()
metode ini:
v.cancel();
Jika Anda menginginkan getaran yang lebih khusus, Anda dapat mencoba membuat pola getaran sendiri:
// 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);
Ada beberapa SDK yang menawarkan rentang umpan balik haptic yang lebih komprehensif. Salah satu yang saya gunakan untuk efek khusus adalah Platform Haptic Development Immersion untuk Android .
Jika perangkat Anda tidak bergetar, pertama-tama pastikan itu dapat bergetar:
// 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");
}
Kedua, harap pastikan bahwa Anda memberi izin pada aplikasi Anda untuk bergetar! Rujuk kembali ke poin pertama.
Metode pembaruan 2017 vibrate (interval) sudah tidak digunakan lagi dengan Android-O (API 8.0)
Untuk mendukung semua versi Android gunakan metode ini.
// 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)
}
}
getSystemService
denganthis.getContext().getSystemService
Jawaban di atas sempurna. Namun saya ingin menggetarkan aplikasi saya persis dua kali pada klik tombol dan informasi kecil ini tidak ada di sini, karenanya memposting untuk pembaca masa depan seperti saya. :)
Kita harus mengikuti seperti yang disebutkan di atas dan satu-satunya perubahan akan berada dalam pola bergetar seperti di bawah ini,
long[] pattern = {0, 100, 1000, 300};
v.vibrate(pattern, -1); //-1 is important
Ini akan bergetar dua kali . Seperti yang sudah kita ketahui
Seseorang dapat terus-menerus menyebutkan penundaan dan getaran sebagai alternatif (mis. 0, 100, 1000, 300, 1000, 300 untuk 3 getaran dan seterusnya ..) tetapi ingatlah kata @ Dave yang menggunakannya secara bertanggung jawab. :)
Perhatikan juga di sini bahwa parameter pengulangan diatur ke -1 yang berarti getaran akan terjadi persis seperti yang disebutkan dalam pola . :)
Saya kesulitan memahami bagaimana melakukan ini pada implementasi pertama saya - pastikan Anda memiliki yang berikut:
1) Perangkat Anda mendukung getaran (tablet Samsung saya tidak berfungsi sehingga saya terus memeriksa ulang kodenya - kode asli berfungsi dengan baik pada CM Touchpad saya
2) Anda telah mendeklarasikan di atas level aplikasi dalam file AndroidManifest.xml Anda untuk memberikan izin kode untuk dijalankan.
3) Telah mengimpor kedua hal berikut ke MainActivity.java Anda dengan impor lainnya: impor android.content.Context; impor android.os.Vibrator;
4) Panggil getaran Anda (sudah dibahas secara luas di utas ini sudah) - Saya melakukannya di fungsi terpisah dan menyebutnya dalam kode di titik lain - tergantung pada apa yang ingin Anda gunakan untuk memanggil getaran Anda mungkin memerlukan gambar ( Android: klik panjang pada tombol -> lakukan tindakan ) atau pendengar tombol, atau objek yang dapat diklik seperti yang didefinisikan dalam XML ( gambar yang dapat diklik - android ):
public void vibrate(int duration)
{
Vibrator vibs = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibs.vibrate(duration);
}
Jika Anda ingin hanya bergetar perangkat sekali untuk memberikan umpan balik pada tindakan pengguna. Anda dapat menggunakan performHapticFeedback()
fungsi a View
. Ini tidak perlu VIBRATE
izin untuk dinyatakan dalam manifes.
Gunakan fungsi berikut sebagai fungsi tingkat atas di beberapa kelas umum seperti Utils.kt dari proyek Anda:
/**
* Vibrates the device. Used for providing feedback when the user performs an action.
*/
fun vibrate(view: View) {
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
}
Dan kemudian gunakan di mana saja di Anda Fragment
atau Activity
sebagai berikut:
vibrate(requireView())
Sederhana seperti itu!
<uses-permission android:name="android.permission.VIBRATE"/>
harus ditambahkan <manifest>
tag di dalam dan di luar <application>
tag.
Saya menggunakan metode utils berikut:
public static final void vibratePhone(Context context, short vibrateMilliSeconds) {
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(vibrateMilliSeconds);
}
Tambahkan izin berikut ke file AndroidManifest
<uses-permission android:name="android.permission.VIBRATE"/>
Anda dapat menggunakan metode kelebihan beban jika Anda ingin menggunakan berbagai jenis getaran (pola / tidak terbatas) seperti yang disarankan di atas.
Jawaban di atas sangat benar tetapi saya memberikan langkah mudah untuk melakukannya:
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);
}
Dan kemudian di file xml Anda:
<button android:layout_height="wrap_content"
android:layout_width ="wrap_content"
android:onclick ="longVibrate"
android:text ="VibrateThrice">
</button>
Itu cara termudah .
Pola / Gelombang yang bergetar :
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
Izin yang diperlukan di AndroidManifest.xml
:
<uses-permission android:name="android.permission.VIBRATE"/>
Gunakan itu sebagai fungsi tingkat atas di beberapa kelas umum proyek Anda seperti Utils.kt
// Vibrates the device for 100 milliseconds.
fun vibrateDevice(context: Context) {
val vibrator = getSystemService(context, Vibrator::class.java)
vibrator?.let {
if (Build.VERSION.SDK_INT >= 26) {
it.vibrate(VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE))
} else {
@Suppress("DEPRECATION")
it.vibrate(100)
}
}
}
Dan menyebutnya di mana saja dalam kode Anda sebagai berikut:
vibrateDevice(requireContext())
Menggunakan Vibrator::class.java
lebih aman daripada menggunakan String
konstanta.
Kami memeriksa vibrator
nullability menggunakan let { }
, karena jika getaran tidak tersedia untuk perangkat, itu vibrator
akan menjadi null
.
Tidak masalah untuk menekan penghentian else
klausa, karena peringatan tersebut dari SDK yang lebih baru.
Kami tidak perlu meminta izin saat runtime untuk menggunakan getaran. Tetapi kita perlu mendeklarasikannya AndroidManifest.xml
sebagai berikut:
<uses-permission android:name="android.permission.VIBRATE"/>
Gunakan ini:
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);
}
catatan:
Jangan lupa untuk menyertakan izin dalam file AndroidManifest.xml:
<uses-permission android:name="android.permission.VIBRATE"/>
Anda dapat Getar Perangkat dan pekerjaannya
Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(100);
Izin diperlukan tetapi tidak pada izin runtime diperlukan
<uses-permission android:name="android.permission.VIBRATE"/>