我正在开发一个将用于自动蓝牙设备测试的测试应用程序。我的应用程序基本上将手机连接到蓝牙设备,以便可以使用Android设备测试设备,测试的性质确实与此问题无关。
我的问题是,我正在使用的其中一个蓝牙设备有语音提示,当他们收到来电时会说出您的电话联系人的姓名。为此,蓝牙设备需要访问Android的电话簿。因此,当设备第一次连接时,我会收到一条弹出电话簿访问请求的对话框消息,说明设备正在请求访问联系人和呼叫历史记录。我试图找到一种方法来响应测试应用程序内部的这个请求,这个应用程序的想法是它应该是自动化的,所以我不想让某人来电话和单击是对此请求,但我肯定需要回答是,否则语音提示无法正常工作。
我能够找到使用onWindowFocusChanged函数弹出请求的时间,并且我确认使用调试器在弹出请求时调用此函数。起初我想也许我可以用ACTION_CLOSE_SYSTEM_DIALOGS解雇它,但事实证明这不会起作用,即使它确实解除了对话(并且它没有解雇它),根据文档这个Intent仅请求关闭对话框,最终对话框将决定如何处理该对话框。
//This function will be called when the dialog is shown.
@Override
public void onWindowFocusChanged(boolean isTrue) {
super.onWindowFocusChanged(isTrue);
if (!isTrue) {
Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
this.sendBroadcast(closeDialog);
}
}
解雇它并不是我想要完成的事情,因为我希望能够选择是选项,以便我的设备能够正确访问联系人。我的另一个想法,就是一种黑客攻击就是弄清楚通知所在的屏幕位置,并在yes选项的位置注入触摸事件。这不是我想要的方式,因为我必须基本上通过反复试验找出位置,因为我不相信我可以从应用程序内部访问对话框以找出它。确切的位置。它也会限制我只能使用我花时间找到是按钮坐标的任何特定设备。
有什么想法吗?