我正在尝试拦截拨出电话,并通过对话框向用户提供中止或继续通话的选项。
第一步显然是编写了一个注册NEW_OUTGOING_CALL的BroadcastReceiver,我已经成功完成了。
我还创建了一个基于Dialog主题的Activity,它向用户显示Abort / Continue按钮。当拨打电话时,我当前的代码在广播接收器中启动此功能没有问题。
我正在努力的是持有通话动作,直到用户有机会作出回应。虽然您可以从BroadcastReceiver的onReceive方法调用startActivity,但该调用会立即返回,在我的情况下,这意味着在显示对话框时调用将完成。
Android "Receiver Lifecycle" information对此有一个相当严格的看法,说:
特别是,您可能无法显示对话框或绑定到服务中 广播接收器。对于前者,您应该使用NotificationManager API。 对于后者,您可以使用Context.startService()向服务发送命令。
我理解阻塞的一般不良以及在广播接收器中显示UI元素。我也明白Android通常是异步的,因此,这有点奇怪。但是,在这种情况下,我认为这是合适的。通知绝对不会解决我的问题。因此,我希望StackOverflow的聪明人能够找到一种方法,尽管谷歌说它无法完成。
此外,Google Voice似乎也是这样做的。
无论如何,我已经搜索了StackOverflow和网络的其余部分来回答这个问题。虽然有很多相关的问题,但我还没有找到一个完全捕捉问题性质的问题,除了this one,这是死的,但唯一的答案完全忽略了这一点。
我考虑的一个选项是中止原始呼叫,然后在用户选择“继续”时放置一个新呼叫。我假设我必须以某种方式发信号通知我的广播接收器不显示此案例的对话框。这应该是可行的,但感觉过于复杂。
提前感谢您的帮助。
答案 0 :(得分:0)
我猜你可以使用调用意图过滤器来调用你的活动,如果用户需要..这将创建一个询问对话框,它将保留,直到用户提供输入。如我错了请纠正我。