如何为特定来电提供定制振动

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

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

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

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

您需要使用两种设置才能使手机振动。 第一个是需要使用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