22

该程序的功能是这样的:用户有一个电话号码列表,只有当没有其他系统范围的应用程序提供振动(例如在静音模式下)时,手机才能在来电时振动。我知道这在某种程度上违反了规则,因为应用程序应该尊重用户的设置,但应用程序仅限于某些有此需求的用户。我尝试了两种方法,但都不满意:

  1. 监听电话状态,直接用我自己的模式(带Vibrator.vibrate())触发振动服务。这种方法在没有来电的情况下有效,但在手机处于CALL_STATE_RINGING状态时随机有效,我猜这是因为与实际处理来电时振动的系统范围的应用程序冲突。

  2. 判断手机是否有来电振动(用AudioManager.shouldVibrate()),决定是否改变振动设置(用AudioManager.setRingerMode()AudioManager.setVibrateSetting())。如果我的应用程序更改了振动设置,一旦手机恢复状态,它们将被恢复CALL_STATE_IDLE。然而,这种方法有时仍然不起作用,没有任何原因的迹象。

我希望有人可以就这个问题提供一些建议。欢迎对这两种方式或其他建议发表评论。

4

1 回答 1

6

您需要使用两种设置才能让手机振动。第一个是需要使用 AufioManager 设置的声音模式:

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setRingerMode(targetSoundMode);

第二部分没有正确记录,我相信这是您的代码中缺少的部分:

String VIBRATE_IN_SILENT_SETTING_NAME = "vibrate_in_silent";
Settings.System.putInt(getContentResolver(), VIBRATE_IN_SILENT_SETTING_NAME, 1);

使用 1 打开振动,使用 0 关闭振动。

要充分了解您应该如何使用振动设置和模式,请查看以下链接: http ://hi-android.info/src/com/android/settings/SoundSettings.java.html

于 2012-05-09T04:46:32.593 回答