如何提供特定来电的自定义振动

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

  1. 听电话状态,直接用我自己的模式(用Vibrator.vibrate() )触发振动服务。 这种方法在电话处于CALL_STATE_RINGING状态时对于没有来电仍然是有效的,而且我认为这是因为与实际处理来电时振动的系统范围的应用程序的冲突。

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

我希望有人能就这个问题提出一些build议。 对这两种方式或其他build议的意见是值得欢迎的。

Solutions Collecting From Web of "如何提供特定来电的自定义振动"

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

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

第二部分没有正确logging,我相信这是你的代码中缺less的部分:

 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