Android Vibrator(震动服务)

本文介绍了Android中实现手机震动功能的Vibrator类,详细讲解了如何获取Vibrator实例,以及主要方法的使用,包括震动时长和模式。特别指出,从Android 8.0开始,系统提供了对震幅的控制,并且旧的震动方法已被弃用,转而使用VibrationEffect进行更精确的控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android手机震动主要用到的类是Vibrator类。该类作为一个系统级的服务类,可以通过getSystemServic(Context.VIBRATOR_SERVICE)来获取该类的实例。

val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator

该类主要包含的方法如下:

//判断是否正在震动
public boolean hasVibrator()

//取消震动
public void cancel()

//开启震动,参数milliseconds为震动时间,单位为毫秒
public void vibrate(long milliseconds)
//开启震动
public void vibrate(long[] pattern, int repeat)

最后一个震动方法的参数解释:

vibrate(longArrayOf(1000, 3000, 5000, 8000), 1)

1000表示系统在1秒钟后开始震动,3000表示系统震动3秒钟,5000表示系统在5秒钟之后开始震动,8000表示系统震动8秒钟。也是就说,如果不重复,整个震动完成的时间为1+3+5+8=17秒钟。repeat表示重复震动的模式的索引。如果不重复可以传递-1。repeat的取值范围为0到pattern的长度-1,上面的repeat的取值范围为0~3。当repeat参数大于取值范围时,会抛出数组下标越界异常。上面的参数为1表示从pattern数组索引为1时开始重复震动。也就是说,当第一次震动结束后重复震动时,会先停止3秒,在震动5秒,在停止8秒。这样重复震动。震动会在一定时间后停止。

开启震动功能需要获取震动权限,该权限不是危险权限,只要在manifests文件中声明就行。

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

Android8.0后
在Android8.0(api26)后,系统添加了对震幅的控制。要判断硬件是否支持对震幅的控制可以调用:

//判断硬件是否支持控制振幅
public boolean hasAmplitudeControl()

上述的两个震动方法也已经被标记过时。取而代之的是:

//开启震动
public void vibrate(VibrationEffect vibe) 

VibrationEffect封装了震动幅度和震动时间,通过VibrationEffect的多种静态方法可以获得一个VibrationEffect的实例:

//创建一个VibrationEffect的实例
//参数milliseconds表示震动时间
//参数amplitude表示震动幅度,取值范围为0-255。或者传入VibrationEffect.DEFAULT_AMPLITUDE表示默认的震动幅度
public static VibrationEffect createOneShot(long milliseconds, int amplitude)

//创建一个VibrationEffect的实例
//参数解释和上面vibrate(long[] pattern, int repeat)一样,每次的震动幅度都是默认幅度
public static VibrationEffect createWaveform(long[] timings, int repeat)

//创建一个VibrationEffect的实例
//添加了对每一次震动幅度的控制
public static VibrationEffect createWaveform(long[] timings, int[] amplitudes, int repeat)

//创建一个预定义震动效果VibrationEffect的实例
//包括VibrationEffect.EFFECT_CLICK,VibrationEffect.EFFECT_DOUBLE_CLICK,VibrationEffect.EFFECT_TICK,VibrationEffect.EFFECT_HEAVY_CLICK
public static VibrationEffect createPredefined(@EffectType int effectId)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值