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