如何使用 Kotlin 使用振动器效果在按钮单击时振动 Android 设备?

问题描述 投票:0回答:6

如何在按下任意按钮时使使用 Kotlin 编码的 Android 设备振动?我使用了下面的代码,但没有执行任何效果或振动。

//click listener
    imgNextBtn.setOnClickListener {
        val vibe:Vibrator = activity?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
        vibe.vibrate(500)
        Utilities.alertDialog(this,
                activity!!,
                mContent!!
    }
}

或者

 //click listener
    imgNextBtn.setOnClickListener {
        val vibe:Vibrator = activity?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
        var effect:VibrationEffect = VibrationEffect.createOneShot(1000, VibrationEffect.DEFAULT_AMPLITUDE);

    vibe.vibrate(effect)
        
        Utilities.alertDialog(this,
                activity!!,
                mContent!!
    }
}

Android 清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.china.openkey">

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
android android-studio kotlin vibration
6个回答
40
投票

您可以创建一个

fun
并从中使用 (
Kotlin
):

fun Fragment.vibratePhone() {
    val vibrator = context?.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
    if (Build.VERSION.SDK_INT >= 26) {
        vibrator.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE))
    } else {
        vibrator.vibrate(200)
    }
}

在你的

fragment
中:

vibratePhone()

终于在你里面了

manifest
:

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

13
投票

@R2R给出的答案很完美。但是

vibrate()
类的
Vibrator
方法从 API 级别 26 开始已弃用。所以,我给你更新的代码:

你不必改变一切。只需更新 MainActivity.kt 中的 vibration 代码即可。

MainActivity.kt:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main);

        val btn_click_me = findViewById(R.id.btn_vibrate) as Button
        btn_click_me.setOnClickListener {
            val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
            if (vibrator.hasVibrator()) { // Vibrator availability checking
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    vibrator.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE)) // New vibrate method for API Level 26 or higher
                } else {
                    vibrator.vibrate(500) // Vibrate method for below API Level 26
                }
            }
        }
    }

}

5
投票

使用 kotlin 工作示例的振动试试这个

Manifest.xml

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

在科特林中:

 val vibratorService = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
        vibratorService.vibrate(500)

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
>

    <Button
        android:id="@+id/btn_vibrate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Vibrate"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main);
        val btn_click_me = findViewById(R.id.btn_vibrate) as Button
        btn_click_me.setOnClickListener {
            val vibratorService = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
            vibratorService.vibrate(500)

        }
    }
}

5
投票

API 31 及更高版本已弃用 Vibrator 服务。 要以正确的方式执行此操作,请按照此问题中所述执行以下操作:

 fun vibrate(){
    val vib = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        val vibratorManager =
            getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
        vibratorManager.defaultVibrator
    } else {
        @Suppress("DEPRECATION")
        getSystemService(VIBRATOR_SERVICE) as Vibrator
    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        vib.vibrate(VibrationEffect.createOneShot(300, VibrationEffect.DEFAULT_AMPLITUDE) )
    }else{
        @Suppress("DEPRECATION")
        vib.vibrate(300)
    }
}

2
投票

简化它可能就像

val buzzer = activity?.getSystemService<Vibrator>()

buzzer?.let {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                buzzer.vibrate(VibrationEffect.createWaveform(pattern, -1))
            } else {
                //deprecated in API 26
                buzzer.vibrate(pattern, -1)
            }
        }

当模式可以像

val pattern = longArrayOf(0, 200, 100, 300)

蜂鸣和非蜂鸣的要素 -> 等待 0 ms,蜂鸣 200ms,等待 100ms,蜂鸣 300ms

当然需要清单中的许可

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

希望,它能帮助将来的人


0
投票

要让您的手机在按下按钮时振动,您可以使用 Android 中的 Vibrator 类。以下是创建振动设备功能的方法:

Kotlin

@Suppress("DEPRECATION")
    fun Context.vibrator(durationMillis: Long = 50) {
        when {
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
                // For Android 12 (S) and above
                val vibratorManager = getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
                val vibrationEffect = VibrationEffect.createOneShot(durationMillis, VibrationEffect.DEFAULT_AMPLITUDE)
                val vibrator = vibratorManager.defaultVibrator
                vibrator.vibrate(vibrationEffect)
            }

            Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && Build.VERSION.SDK_INT < Build.VERSION_CODES.S -> {
                // For Android 8.0 (Oreo) to Android 11 (R)
                val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
                val vibrationEffect = VibrationEffect.createOneShot(durationMillis, VibrationEffect.DEFAULT_AMPLITUDE)
                vibrator.vibrate(vibrationEffect)
            }

            else -> {
                // For Android versions below Oreo (API level 26)
                val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
                vibrator.vibrate(durationMillis)
            }
        }
    }

vibrator()
函数中,代码分为三段:一段适用于 Android 12 (S) 及以上版本,另一段适用于 Android 8.0 (Oreo) 至 Android 11 (R),最后一段适用于版本低于 Oreo(API 级别 26)

确保根据您在每个部分的需要调整行为和振动持续时间。


另外,不要忘记在您的

AndroidManifest.xml
文件中添加使用振动器所需的权限:

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

要使用此功能,您可以在单击按钮时调用它。

活动课程中

myButton.setOnClickListener {
    vibrator(1000) // Vibrate for 1 second (1000 milliseconds)
}

myButton.setOnClickListener {
    vibrator() // Vibrate for 50 milliseconds
}

非活动课程中

myButton.setOnClickListener {
    context.vibrator(1000) // Vibrate for 1 second (1000 milliseconds)
}

myButton.setOnClickListener {
    context.vibrator() // Vibrate for 50 milliseconds
}
© www.soinside.com 2019 - 2024. All rights reserved.