如何添加窗口到应用程序我正在使用AccessibilityService观察?

问题描述:

我正在开发一个浮动窗口,这将在应用中我使用AccessibilityService观察显示。 但我不希望窗口显示在其他应用程序。如何添加窗口到应用程序我正在使用AccessibilityService观察?

所以我首先配置的<accessibility-service>android:packageNames财产。然后找到了一些解决方案,以检查用户是否正在使用的应用程序我配置一样getRunningTasksgetRunningAppProcessesUsageStatsManager。但他们都有一些缺点。

现在的问题是:

有没有什么办法来检查是否我使用的应用程序无障碍目前前景配置?

OR:

有什么办法,使在应用中展示的窗口,我配置为使用可访问性和其他应用程序未显示?

非常感谢!

+0

如果指定的包名称,当_other_应用程序处于前台时,您会获得辅助功能吗?如果没有,那么也许你可以确定你的应用程序进入并退出前台时收到的事件。 – ataulm

+0

感谢@ataulm但我只设置'机器人:accessibilityEventTypes =“typeAllMask”',看看我能接收事件进入应用程序,但没有事件退出应用程序。 – Boolean93

+0

噢,这是我的错,我给所有人设置了packageNames,一切都顺利 – Boolean93

由于@ataulm的想法!

我发现检查的一个完美的方式我的应用程序是否在前台:

  1. 设置可访问的packageName所有
  2. 设置可访问的EventTypestypeAllMask
  3. 的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); 
    }