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

如何获取Android系统默认通知振动模式的long[]数组?

获取系统默认通知振动模式的解决方案

问题背景

我开发的应用会拦截通知并立即移除,避免系统自动播放振动,但之后需要手动触发对应渠道的默认振动模式。目前的困境是:

  • 当通知渠道的mVibrationEnabled为true但mVibration为null时,系统会播放默认振动模式
  • 对于带自定义振动模式的渠道,我能获取到对应的long[]数组,但找不到获取系统默认振动模式数组的方法(已能正常获取默认通知音效)

对应的NotificationChannel数据如下:

[NotificationChannel{mId='your_channel_id', mName=Your Channel Name, mDescription=hasDescription , mImportance=4, mBypassDnd=false, mLockscreenVisibility=-1000, mSound=content://settings/system/notification_sound, mLights=false, mLightColor=0, mVibration=null, mUserLockedFields=0, mUserVisibleTaskShown=false, mVibrationEnabled=true, mShowBadge=true, mDeleted=false, mDeletedTimeMs=-1, mGroup='null', mAudioAttributes=AudioAttributes: usage=USAGE_NOTIFICATION content=CONTENT_TYPE_SONIFICATION flags=0x800 tags= bundle=null, mBlockableSystem=false, mAllowBubbles=-1, mImportanceLockedByOEM=false, mImportanceLockedDefaultApp=false, mOriginalImp=4, mParent=null, mConversationId=null, mDemoted=false, mImportantConvo=false, mSoundMissingReason=0}]

可行解决方案

方案1:读取系统设置中的默认振动模式

系统默认振动模式存储在Settings.System.VIBRATE_PATTERN中,可通过ContentResolver读取并转换为long[]数组:

ContentResolver contentResolver = getContentResolver();
String patternStr = Settings.System.getString(contentResolver, Settings.System.VIBRATE_PATTERN);
long[] defaultPattern = null;

if (patternStr != null) {
    String[] strParts = patternStr.split(",");
    defaultPattern = new long[strParts.length];
    for (int i = 0; i < strParts.length; i++) {
        defaultPattern[i] = Long.parseLong(strParts[i].trim());
    }
}

如果读取失败(部分定制ROM可能未定义该设置),可以使用通用的 fallback 模式,比如new long[]{0, 250, 250, 250}。

方案2:直接调用系统预定义的默认振动效果(推荐)

不需要手动获取数组,直接通过Vibrator服务触发系统默认的通知振动,兼容性更好:

Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (vibrator != null && vibrator.hasVibrator()) {
    // Android O及以上支持预定义振动效果
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_NOTIFICATION_DEFAULT));
    } else {
        // 低版本直接使用通用默认模式
        vibrator.vibrate(new long[]{0, 500}, -1);
    }
}

注意事项

  • 需在AndroidManifest.xml中添加振动权限:<uses-permission android:name="android.permission.VIBRATE" />
  • Android 13+ 若涉及通知相关操作,需额外申请POST_NOTIFICATIONS权限,但振动核心依赖VIBRATE权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:35:12