当电话来电时,我希望关闭设备的振动设置。我已经为此功能实现了一个广播接收器,该接收器会在接收到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();
}
一个线程最初由手机应用程序启动,该应用程序会使手机振动。当我将振动设置更改为关闭时,此检查被跳过,但已经启动的线程仍然继续运行。
这也解释了来电时如何打开振动功能。在这种情况下,线程最初未运行。然后,在我打开振动设置时启动它。我认为没有任何解决问题的方法,除非更改手机应用程序。