如何以编程方式关闭/取消/关闭系统对话框(Android)

Nil*_*iar 9 android dialog

我有一个应用程序可以进行USSD调用,但在所有USSD调用之后,我得到了一个结果对话框的对话框.

我知道可以关闭此对话框,因为"USSD Checker"应用程序执行此操作,他们从USSD获得响应而不显示用户对话框.

手机utils类中

具有displayMMIComplete完成Ussd调用后显示TYPE_SYSTEM_DIALOG的功能.在PhoneUtils.java中,他们使用如下对话框:

AlertDialog newDialog = new AlertDialog.Builder(context)
                    .setMessage(text)
                    .setPositiveButton(R.string.ok, null)
                    .setCancelable(true)
                    .create();
newDialog.getWindow().setType(
                    WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);
newDialog.getWindow().addFlags(
                    WindowManager.LayoutParams.FLAG_DIM_BEHIND);
newDialog.show();
Run Code Online (Sandbox Code Playgroud)

然后我不能只发一些旗帜来解雇它.我不能使用导入它的系统类.

而当我做X连续调用出现X对话框给用户关闭,而我的应用程序将需要连续调用,无论如何以编程方式关闭此系统对话框?

Nil*_*iar 6

如果您尝试使用USSD调用我找到了问题的答案,您可以禁用结果文本

在俄罗斯博客中有一篇帖子展示了如何连接到android的phoneutils服务,然后控制来自USSD(CALL和RESULT)的文本.他展示了一个使用界面(IExtentedendNetworkService)的示例,该界面仅在Android OS启动时绑定在手机工具上,如果没有任何其他应用程序尝试执行相同的操作(因为只有一个服务可以绑定,可能是你的或不是,我不知道Android OS用来选择的规则.

在函数"CharSequence getUserMessage(CharSequence text);"中 如果返回null,则不会显示结果对话框.


dro*_*idd 5

只需在代码中添加此行即可.

Intent intent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)

  • 嗨它也不适合我,USSD对话框仍在那里:( (4认同)