如何使Android设备振动?以不同的频率?
如何使Android设备振动?
在Android O(API 8.0)中已弃用vibrate(interval)方法
为了支持所有Android版本,请使用此方法。
Java:
//振动150毫秒
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:
//振动150毫秒
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)
}
}
我们不需要运行时权限来进行振动。振动不是一个危险权限,所以它只需要在清单文件中声明即可。
文档已经移动。将更新或删除它。
唯一需要补充的是,如果您在Activity中使用此方法且没有特定的Context变量,则应将getSystemService替换为this.getContext().getSystemService。
由于这个函数名,您赢得了一个点赞,谢谢。
如何使Android设备振动?以不同的频率
在开始实施任何振动代码之前,您必须给您的应用程序授予振动权限:
<uses-permission android:name="android.permission.VIBRATE"/>
确保在AndroidManifest.xml文件中包含此行。
导入振动库
大多数集成开发环境(IDE)都会为您执行此操作,但如果您的IDE没有导入语句,请使用以下导入语句:
import android.os.Vibrator;
请确保在您希望进行振动的活动中包含此语句。
如何按给定时间振动
在大多数情况下,您希望在设备上振动一小段预定时间。您可以使用vibrate(long milliseconds)
方法来实现这一点。以下是一个快速示例:
// 从当前上下文获取Vibrator实例 Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // 振动400毫秒 v.vibrate(400);
就是这样,很简单!
如何无限振动
可能有时您希望设备持续振动。为此,我们使用vibrate(long[] pattern, int repeat)
方法:
// 从当前上下文获取Vibrator实例 Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // 无延迟开始 // 振动100毫秒 // 休眠1000毫秒 long[] pattern = {0, 100, 1000}; // 这里的'0'表示无限重复 // '0'实际上是模式重复的起始位置的索引 // 要从任何其他点重复模式,可以增加索引,例如'1' v.vibrate(pattern, 0);
当您准备停止振动时,只需调用cancel()
方法:
v.cancel();
如何使用振动模式
如果您想要更特别的振动,可以尝试创建自己的振动模式:
// 从当前上下文获取Vibrator实例 Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // 无延迟开始 // 每个元素交替振动,休眠,振动,休眠... long[] pattern = {0, 100, 1000, 300, 200, 100, 500, 200, 100}; // 这里的'-1'表示只振动一次,因为'-1'超出了模式数组的范围 v.vibrate(pattern, -1);
更复杂的振动
有多个SDK提供更全面的触觉反馈。我使用的一个用于特殊效果的是Immersion的Android触觉开发平台。
故障排除
如果您的设备无法振动,请首先确保它可以振动:
// 从当前上下文获取Vibrator实例 Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // 如果可以振动,则输出yes;否则输出no if (v.hasVibrator()) { Log.v("Can Vibrate", "YES"); } else { Log.v("Can Vibrate", "NO"); }
其次,请确保您已经给您的应用程序授予振动权限!请参考第一个要点。
很好的回答,但我要提醒在使用此功能时要负责任!
很棒的答案,但有一点。当你说“这里的'0'表示无限重复”时,虽然是正确的,但有点误导。这个数字是模式数组中模式重复时开始的索引。
很好的观点,但这超出了大多数人试图实现的范围。我选择了一个简单的解释 🙂
George Betsworth如何在手机静音模式下进行振动?请。
因为我必须强制关闭我的应用程序 🙂
它确实会无限重复模式,但是如何只振动3次,例如(即:开始+振动+休眠+振动+休眠+振动+停止)?!
阅读关于“如何使用振动模式”的部分。类似于:long[] pattern = {0, 100, 100, 100, 100, 100}; v.vibrate(pattern, -1);
immersion链接失效了,我在archive.org上找不到它 🙁
它在休眠和振动之间切换。不是反过来。
这在代码注释中提到。如果您错过了上一行的“无延迟开始”注释,那可能会令人困惑。如果是这样,我道歉。
如果您为Notification
创建了NotificationChannel
,请不要忘记卸载应用程序。否则,模式不会覆盖先前的振动模式。
- 是否有任何方法可以连续不间断地振动,而不是以特定的方式(如您上面描述的振动,延迟,振动,延迟...)?
在开发Android应用程序时,有时候需要让设备振动。下面的内容给出了如何让一个Android设备振动的方法,并且可以设置不同的振动频率。
首先,需要在AndroidManifest.xml文件中添加振动权限:
然后,可以使用以下代码来实现振动功能:
import android.os.Vibrator; ... Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // 振动500毫秒 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { v.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE)); } else { // 在API 26之前的版本中被弃用 v.vibrate(500); }
这段代码中,首先通过`getSystemService(Context.VIBRATOR_SERVICE)`获取到Vibrator对象。然后根据设备的API版本来判断使用不同的振动方法。在API 26及以上的版本中,可以使用`VibrationEffect.createOneShot()`方法来设置振动时间和振动强度;在API 26之前的版本中,可以直接使用`v.vibrate()`方法设置振动时间。
同时,还有一些相关的问题和解决方法:
- 如果遇到了"context cannot be resolved or is not a field"的错误,可能是因为没有正确引入Context类。可以尝试在代码中添加`Context context = getApplicationContext();`来解决这个问题。
- 使用上述方法进行振动时,如果手机处于省电模式并且没有连接电源,可能无法触发振动。这是为了节省电量的设计。
- 上述方法在API 26及以上的版本中已经被弃用,推荐使用`vibrate(VibrationEffect)`方法来代替。
总结起来,以上就是如何在Android设备上实现振动功能的方法。通过添加振动权限和使用Vibrator对象的相关方法,可以实现不同频率的设备振动。