程序的功能如下:用户有一个电话号码列表,只有当其他系统应用程序没有提供振动时(例如静音模式),手机才能在来电时振动。我知道这是违反规则的,因为应用程序应该尊重用户的设置,但应用程序仅限于某些具有此需求的用户。我尝试了两种方法,但它们都不令人满意:
收听电话状态并使用我自己的模式直接触发振动服务(使用Vibrator.vibrate()
)。当手机处于CALL_STATE_RINGING
状态时,此方法有效,没有来电但随机有效,我猜这是因为与系统范围的应用程序实际处理来电时振动的冲突。
判断手机是否在来电时振动(AudioManager.shouldVibrate()
),并决定是否更改振动设置(使用AudioManager.setRingerMode()
和AudioManager.setVibrateSetting()
)。如果我的应用程序更改了振动设置,则一旦手机返回CALL_STATE_IDLE
状态,它们将被恢复。然而,这种方法有时仍无法正常工作,没有任何迹象表明原因。
我希望有人可以就这个问题提出一些建议。欢迎对这两种方式或其他方式提出意见。
答案 0 :(得分: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