当下这个数字化时代,设备在特定动作中产生振动具备诸多实用价值。然而,许多人对此操作方法并不了解。今天,我们将对此进行深入讨论。
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);
}
设备振动权限的授予
在启动设备振动功能之前,需确保已给予相应应用振动权限。这和手机应用安装时类似,若安装时未注意权限设置,将来使用振动功能时便会遇到问题。此过程相当于为设备开启了振动功能的通道。不同操作系统中,授权位置和方式各异。比如在安卓系统,需进入设置中的应用权限管理,找到目标应用并激活振动权限。
权限不足,振动代码便失去了作用。若你制作了一款提醒软件,意图通过震动来提醒用户,但未获得相应权限,那么便无法实现提醒功能,这会影响到用户的体验。
import android.os.Vibrator;
确定振动发生的活动中包含授权操作
权限一旦明确,必须保证在振动触发时权限操作得以实施。比如,当用户在健身APP完成锻炼任务后设备振动,就必须在对应任务的代码中确认权限已妥善处理。过去有些开发者未能注意这一点,导致测试时振动环节始终无法启动。这正是因为未正确核实活动中的权限执行。此类问题常常在调试阶段让人困惑不解。
不采取这种做法,可能会在特定情况下引发振动功能无法正常运作。比如,若你开发了一款游戏,玩家成功通关后应感受到振动庆祝,但设备却无任何反应,这可能会让玩家怀疑游戏是否出现了故障。
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 400 milliseconds
v.vibrate(400);
按需求设定振动时长
通常需要将振动设备设定在特定的时间段内运作。比如日常用的闹钟,它的振动不会持续太长,仅为了吸引你的注意,振动一会儿便停止。若以秒来计算,可能设定为1到3秒的短暂振动。
// 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);
不过,有时你或许想让设备持续震动不停。比如,某些紧急警报软件,在地震或火灾发生时,会不断震动,直到用户手动关闭或是设备出现故障。
停止振动的操作
v.cancel();
停止振动时,只需调用对应的方法即可。这相当于给振动功能按下了暂停。例如,在使用远程控制智能家居的APP时,若设备因故障持续震动,你可通过APP的停止振动按钮来调用相应方法,使设备停止振动。若未完成此操作,设备可能会持续震动,直至电量耗尽。
对于开发者而言,在编写代码时,必须确保正确编写停止振动的函数调用,否则可能会导致一些预料之外的问题发生。
定制自己的振动模式
// 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);
若要使振动更具特色,可以打造独特的振动样式。之前讲到的数字编码,比如0代表延后,100则代表初始振动时长为100毫秒。这样的个性化设置能够满足更多特定需求。以音乐APP为例,其震动模式可随音乐节奏调整。曾有一款APP,开发者希望借助振动让用户感受到音乐的质感,便尝试设计自定义振动模式,此举显著增强了用户在聆听动感音乐时的沉浸感。
自行设置振动模式会让操作变得繁琐,同时涉及众多必须细致思考的要素,以确保用户获得最佳的体验。
设备本身的振动条件
// 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");
}
若设备未启动振动,需先检查其是否具备振动功能。部分设备硬件上并不支持振动,若忽视这一点,持续在软件层面寻找问题,则如同逆水行舟。比如那些超小型简易智能设备,有些甚至未配备振动模块。
设备若具有振动特性,除了前面提到的权限分配问题,还可能涉及硬件故障等其他情况。此时,需检查设备内部的振动装置是否运作正常。
是否有过在调整设备振动参数时感到十分棘手的经历?不妨在评论区告诉我们。期待大家能点赞并转发此文,帮助更多人避免在设备振动设置上走错路。
public void vibrate(int duration)
{
Vibrator vibs = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibs.vibrate(duration);
}