Android手机来电时无法关闭震动设置

8

当电话来电时,我希望关闭设备的振动设置。我已经为此功能实现了一个广播接收器,该接收器会在接收到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();

我认为第一种方法非常理想。它甚至可以在接到电话时打开振动。但是,在这种情况下,我无法关闭它们。

有人试过这个吗?

编辑:我检查了安卓手机应用程序的代码。以下代码存在于Ringer.java中:

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

一个线程最初由手机应用程序启动,该应用程序会使手机振动。当我将振动设置更改为关闭时,此检查被跳过,但已经启动的线程仍然继续运行。

这也解释了来电时如何打开振动功能。在这种情况下,线程最初未运行。然后,在我打开振动设置时启动它。我认为没有任何解决问题的方法,除非更改手机应用程序。


1
我也对此很感兴趣。据我所知,情况是这样的:启动振动的线程或上下文是唯一能够稍后停止它的。关于更改振动设置:在安卓系统中似乎存在一个 bug。如果设置发生更改,则不会向收听器发送任何通知,因此振动无法停止。 - SimonSays
你好,Aman。你解决了这个问题吗?我也遇到了同样的问题,希望你能帮助我。 - Hardik Joshi
1个回答

0

这个:

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

不会有任何帮助,因为它会取消 Vibrator 的新实例。

我可以想象如果通话已经来了,振动已经在进行中,那么关闭设备的振动可能已经太晚了。因此,您必须在通话到来之前执行此操作。


我想只有在来电是来自所选联系人之一时才更改振动设置。因此,在来电之前更改振动设置不是一个选项。由于Android允许在通话到来后更改铃声模式和铃声音量,我希望也可以更改振动设置。 - Aman Bakshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接