You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android:如何让振动在「仅振动」模式下正常工作?

Android 仅振动模式下振动功能失效的解决方案

问题场景

在Android(API 34,Android 11)应用中使用以下代码实现振动功能:

Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
long[] pattern = {0, 500, 500};
v.vibrate(VibrationEffect.createWaveform(pattern, 0));

设备处于「正常」模式时振动可正常运行,但切换至「仅振动」模式后,振动功能失效。

核心原因

仅振动模式下,系统会拦截未明确用途的振动请求;原代码未配置振动用途属性,导致系统判定该振动不符合模式规则。

解决方案

1. 确认权限配置

在AndroidManifest.xml中添加振动权限(普通权限,安装自动授予):

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

2. 配置AudioAttributes指定振动用途

针对API 26+,通过AudioAttributes明确振动的用途类型,让系统认可该振动在仅振动模式下的合法性:

Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
if (v.hasVibrator()) {
    // 根据场景选择用途:如通知用USAGE_NOTIFICATION_EVENT,闹钟用USAGE_ALARM
    AudioAttributes attrs = new AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_NOTIFICATION_EVENT)
            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
            .build();
    long[] pattern = {0, 500, 500};
    VibrationEffect effect = VibrationEffect.createWaveform(pattern, 0);
    v.vibrate(effect, attrs);
}

3. API版本适配

API 31+部分vibrate重载已废弃,必须使用带AudioAttributes的调用方式,避免兼容性问题。

4. 检查系统振动设置

确认设备「仅振动」模式下的振动强度未设为0:进入系统设置→声音和振动→振动强度,确保通知、媒体等相关振动强度正常。

内容的提问来源于stack exchange,提问作者Binyamin Pekar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 06:27:11