You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android应用适配MIUI10:如何禁用静音模式下来电振动?

解决MIUI10设备静音模式下来电仍振动的问题

Hey Philip, 这个问题我之前做MIUI适配的时候踩过坑,MIUI对静音和振动的逻辑做了定制化修改,原生Android的常规方法确实绕不开它默认的“静音时振动”设置。给你几个经过验证的解决方案:

方案一:修改MIUI专属系统设置项

MIUI在系统设置里有自己的静音振动开关,我们可以通过修改对应的Settings值来关闭它,步骤如下:

  1. 添加权限:在AndroidManifest.xml中写入权限:
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
  1. 动态申请权限:Android 6.0及以上需要用户手动授权修改系统设置,代码如下:
if (!Settings.System.canWrite(context)) {
    Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
    intent.setData(Uri.parse("package:" + context.getPackageName()));
    context.startActivity(intent);
}
  1. 关闭静音振动:通过Settings.System修改对应配置项(MIUI10常用的键名是silent_vibrate_enabledvibrate_when_silent,不同小版本可能有差异,建议都试一下):
// 关闭静音模式下的来电振动
Settings.System.putInt(context.getContentResolver(), "silent_vibrate_enabled", 0);
// 备选键名,适配部分MIUI10子版本
Settings.System.putInt(context.getContentResolver(), "vibrate_when_silent", 0);

方案二:启用“请勿打扰(DND)”模式

MIUI的DND模式默认会完全屏蔽来电的声音和振动,效果比单纯设置静音更彻底,步骤如下:

  1. 添加权限:在AndroidManifest.xml中写入权限:
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
  1. 申请DND权限:Android 6.0及以上需要用户授权管理通知权限:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    if (!notificationManager.isNotificationPolicyAccessGranted()) {
        Intent intent = new Intent(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
        context.startActivity(intent);
    } else {
        // 设置为完全静音无打扰模式,屏蔽所有声音和振动
        notificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_NONE);
    }
}
  1. 恢复正常模式:如果需要取消DND,只需把INTERRUPTION_FILTER_NONE改成INTERRUPTION_FILTER_ALL即可。

注意事项

  • 两种方案都需要用户手动授权对应权限,一定要做好权限申请的引导提示,不然代码不会生效。
  • MIUI的版本迭代可能会修改设置项的键名,建议在不同的MIUI10小版本上测试验证。
  • 方案二的DND模式会屏蔽所有通知提醒,如果你的应用只需要屏蔽来电振动,可以优先尝试方案一。

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

火山引擎 最新活动