【发布时间】:2011-11-09 13:41:34
【问题描述】:
我想在来电时关闭设备振动设置。我已经为此功能实现了一个 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();
}
电话应用程序最初会启动一个线程,该应用程序会振动电话。当我将振动设置更改为关闭时,会跳过此检查,但已启动的线程会继续运行。
这也说明了来电时如何打开振动。在这种情况下,线程最初没有运行。然后,当我打开振动设置时它就开始了。如果不更改电话应用程序,我认为无法解决问题。
【问题讨论】:
-
我也会对此感兴趣。据我所知是这样的:启动振动的线程或上下文是唯一可以在以后停止它的线程或上下文。关于更改振动设置:android 中似乎存在错误。如果设置更改,不会向听众发送通知,因此振动无法停止。
-
你好阿曼,你解决了这个问题吗?我面临同样的问题,希望你能帮助我解决同样的问题。