几天来,我一直在这里和其他论坛上阅读有关USSD对话的线索.(USSD表示运营商的通知,其中包含通话费用详情).
我已经看到很多解决方案显然适用于Android中较低的API级别,但经过大量的测试,认为它们不再工作或者至少我无法让它们工作.
首先,我想知道是否有任何方法可以检测是否已向用户显示ussd对话框.所以我试过这个: 阻止USSD对话并阅读USSD回复?
但我从日志中获得的所有东西都与我的应用程序有关,虽然我可以在Eclipse的LogCat中看到它们,但我的应用程序中没有捕获到MMI相关的日志!也许它的工作版本低于我的Android版本(4.2.2).
然后我决定使用"IExtendedNetworkService",就像它在以下链接中使用的那样:
https://github.com/alaasalman/ussdinterceptor
使用IExtendedNetworkService在Android中获取USSD响应
实施USSD功能.将服务绑定到PhoneUtils,而不是在每次更新时重新启动手机
但它对Android 4.2.2及更高版本也没用.
然后我找到了这个链接: 如何解除Android中的系统对话框?
它似乎很有希望,但即使经过大量的测试,我也无法使它工作.我想也许我做错了什么,或者也是为了降低API.
之后我尝试了许多其他的东西,比如模拟主键和后退键,甚至以编程方式触摸隐藏该通知,但由于它们都在我自己的活动下工作,所以没有一个工作.
有谁知道这些方法或其他方法是否适用于管理甚至检测Android 4.2.2及更高版本中的USSD消息?
我非常感谢任何帮助,提前谢谢.
我知道这个问题在此之前被问过Android禁用最近的任务按钮,就像在SureLock中一样,但由于答案没有用,所以也许有些人可以分享这个被遗忘的事情.
我也尝试过:
private void closeRecents() {
activ.sendBroadcast(new Intent("com.android.systemui.recent.action.CLOSE"));
Intent closeRecents = new Intent("com.android.systemui.recent.action.TOGGLE_RECENTS");
closeRecents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
ComponentName recents = new ComponentName(SYSTEM_UI_PACKAGE_NAME, RECENTS_ACTIVITY);
closeRecents.setComponent(recents);
activ.startActivity(closeRecents);
}
Run Code Online (Sandbox Code Playgroud)
但没有运气
在Android Ui测试中,我想在对话框中单击一个微调项目,但它会弹出以下错误:
va.lang.RuntimeException: Waited for the root of the view hierarchy to have window focus and not be requesting layout for over 10 seconds. If you specified a non default root matcher, it may be picking a root that never takes focus. Otherwise, something is seriously wrong. Selected Root:
Root{application-window-token=android.view.ViewRootImpl$W@2dac97c7, window-token=android.view.ViewRootImpl$W@2dac97c7, has-window-focus=false, layout-params-type=1, layout-params-string=WM.LayoutParams{(0,0)(fillxfill) sim=#10 ty=1 fl=#81810100 pfl=0x8 wanim=0x1030461 surfaceInsets=Rect(0, 0 - 0, 0) mwfl=0x0}, decor-view-string=MultiPhoneDecorView{id=-1, visibility=VISIBLE, width=1600, height=2560, has-focus=true, has-focusable=true, has-window-focus=false, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, …Run Code Online (Sandbox Code Playgroud) android automated-tests android-espresso android-uiautomator
我有一个应用程序可以进行USSD调用,但在所有USSD调用之后,我得到了一个结果对话框的对话框.
我知道可以关闭此对话框,因为"USSD Checker"应用程序执行此操作,他们从USSD获得响应而不显示用户对话框.
具有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对话框给用户关闭,而我的应用程序将需要连续调用,无论如何以编程方式关闭此系统对话框?
我的要求:从特定应用的弹出窗口,对话框等中读取文本.
我已经实现了一个辅助功能服务,我按照我的要求接收了适当的事件和数据.然而,在测试时,我意识到在某些设备上而不是使用AlertDialog或Dialog,他们使用了一个活动(主题为对话框).因此,在我的辅助功能事件中,我只收到活动标题,是否有一种方法可以找到此特定弹出活动显示的文本?
我搜索得非常努力,但在这个主题上得不到多少帮助,文档也没有任何好处.可访问性服务的代码并不多,但如果您仍然需要,我会稍后发布.
谢谢