我想在通话时关闭设备振动设置。我已经为此功能实现了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();
}
线程最初是通过手机应用程序启动的,它会使手机振动。当我将振动设置更改为关闭时,将跳过此检查但已启动的线程继续运行。
这也解释了来电时如何打开振动。在这种情况下,线程最初没有运行。然后,当我打开振动设置时启动它。如果不更改手机应用程序,我认为没有任何解决方案。
答案 0 :(得分:0)
这个:
Vibrator vib = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vib.cancel();
不会帮助你,因为它取消了振动器的新实例。
我可以想象,如果呼叫已经进入,因为振动已经在进行中,那么转动设备的振动为时已晚。所以在打电话之前你必须这样做。