接收来电时振动设置未关闭 – Android

我想在通话时关闭设备振动设置.我已经为此功能实现了BroadcastReceiver,它执行接收PHONE_STATE广播的操作.问题是我根本无法关闭振动.我尝试过以下方法:
AudioManager audioManager = (AudioManager)
                            context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_OFF);

要么

Vibrator vib = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vib.cancel();

第一种方法对我来说似乎很理想.它甚至适用于在收到呼叫时“开启”振动.但是,在这种情况下,我无法将它们“关闭”.

有人试过吗?

编辑:我查看了Android的手机应用代码.以下代码出现在Ringer.java中:

if (shouldVibrate() && mVibratorThread == null) {
    mContinueVibrating = true;
    mVibratorThread = new VibratorThread();
    mVibratorThread.start();
}

最初通过电话应用程序启动一个线程,使手机振动.当我将振动设置更改为关闭时,将跳过此检查但已启动的线程继续运行.

这也解释了来电时如何打开振动.在这种情况下,线程最初没有运行.然后,当我打开振动设置时启动它.如果不更改手机应用程序,我认为没有任何解决方案.

解决方法

这个:
Vibrator vib = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vib.cancel();

不会帮助你,因为它取消了振动器的新实例.

我可以想象,如果由于振动已在进行中呼叫已经进入,则转动设备的振动为时已晚.所以在打电话之前你必须这样做.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...