【发布时间】:2012-02-06 16:36:23
【问题描述】:
程序的功能是这样的:用户有一个电话号码列表,只有当没有其他系统范围的应用程序提供振动(例如在静音模式下)时,手机才能在来电时振动。我知道这在某种程度上违反了规则,因为应用程序应该尊重用户的设置,但应用程序仅限于某些有此需求的用户。我尝试了两种方法,但都不满意:
监听电话状态,直接用我自己的pattern(用
Vibrator.vibrate())触发震动服务。这种方法在手机处于CALL_STATE_RINGING状态时有效,没有来电但随机有效,我猜这是因为与实际处理来电振动的系统范围的应用程序冲突。来电时判断手机是否振动(
AudioManager.shouldVibrate()),决定是否改变振动设置(AudioManager.setRingerMode()和AudioManager.setVibrateSetting())。如果我的应用程序更改了振动设置,一旦手机回到CALL_STATE_IDLE状态,它们将被恢复。但是,这种方法有时仍然不起作用,没有任何原因。
我希望有人可以就这个问题提供一些建议。欢迎对这两种方式发表评论或提出其他建议。
【问题讨论】:
-
@Rizon 很遗憾,没有,这个问题为我赢得了风滚草徽章。
-
这不一样,但有人尝试在来电时禁用振动,但事实证明这是不可能的,但您的发现很有趣:stackoverflow.com/q/8065862/969325
-
@Warpzit 谢谢。看来如果我能在 Ringer 之前收到广播,问题就解决了。我不知道该怎么做,也许我应该检查一下 Ringer.java。
-
setVibrateSetting()和setRingerMode()似乎可以在我的手机上使用。你能发布你的代码吗? -
@SergeyGlotov 好吧,实际上它们也适用于我的手机。问题出现在我朋友正在测试的设备上。我只是在寻找一些更强大的方法。代码太长太复杂,恐怕不是问题所在。
标签: android telephonymanager vibration android-audiomanager