如何添加窗口到应用程序我正在使用AccessibilityService观察?
问题描述:
我正在开发一个浮动窗口,这将在应用中我使用AccessibilityService观察显示。 但我不希望窗口显示在其他应用程序。如何添加窗口到应用程序我正在使用AccessibilityService观察?
所以我首先配置的<accessibility-service>
的android:packageNames
财产。然后找到了一些解决方案,以检查用户是否正在使用的应用程序我配置一样getRunningTasks
,getRunningAppProcesses
和UsageStatsManager
。但他们都有一些缺点。
现在的问题是:
有没有什么办法来检查是否我使用的应用程序无障碍目前前景配置?
OR:
有什么办法,使在应用中展示的窗口,我配置为使用可访问性和其他应用程序未显示?
非常感谢!
答
由于@ataulm的想法!
我发现检查的一个完美的方式我的应用程序是否在前台:
- 设置可访问的
packageName
所有 - 设置可访问的
EventTypes
到typeAllMask
-
的Java:
public void onAccessibilityEvent(AccessibilityEvent event) { if (event == null || event.getSource() == null) { return; } AccessibilityNodeInfo source = event.getSource(); String className = source.getClassName().toString(); switch (event.getEventType()) { case AccessibilityEvent.TYPE_VIEW_SCROLLED: Log.i(TAG, "onAccessibilityEvent: scrolled"); break; case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED: setForegroundApp(event.getPackageName()); break; } } public static String sForegroundPackageName; static final List<String> supportedPackagesName = blablablabla; public static void setForegroundApp(CharSequence packageName) { if (packageName != null) { sForegroundPackageName = packageName.toString(); } } // use this to check. public static boolean isForeground() { return supportedPackagesName.contains(sForegroundPackageName); }
如果指定的包名称,当_other_应用程序处于前台时,您会获得辅助功能吗?如果没有,那么也许你可以确定你的应用程序进入并退出前台时收到的事件。 – ataulm
感谢@ataulm但我只设置'机器人:accessibilityEventTypes =“typeAllMask”',看看我能接收事件进入应用程序,但没有事件退出应用程序。 – Boolean93
噢,这是我的错,我给所有人设置了packageNames,一切都顺利 – Boolean93