1

我使用辅助功能服务在 Google 相册应用上绘制图标,并使用以下代码进行操作:

AccessibilityServiceInfo info = new AccessibilityServiceInfo();
    info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK;
    info.packageNames = new String[] {"com.google.android.apps.photos"};
    info.notificationTimeout = 100;
    setServiceInfo(info);

但是当用户关闭应用程序或隐藏它时,图标会离开。我没有找到任何可以处理这种情况的事件。任何人都可以帮我解决这个问题。我只想为某些应用程序绘制图标,并在用户关闭此应用程序后将其删除。

更新

我使用了 AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED 事件并按事件获取包名称,但是在绘制图标时从 Android N 开始,AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED 发生在我自己的包名称和图标被删除的情况下。

4

1 回答 1

2

我使用此代码获取所有应用程序的事件:

AccessibilityServiceInfo config = new AccessibilityServiceInfo();
config.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
config.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
config.notificationTimeout = 100;

if (Build.VERSION.SDK_INT >= 16) {
  //Just in case this helps
  config.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
}
setServiceInfo(config);

然后我在方法中过滤应用程序onAccessibilityEvent

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
  try { // Try to avoid Security exceptions (Seen in Play Console)
    if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
      if (event.getPackageName() != null && event.getClassName() != null) {
        ComponentName componentName = new ComponentName(
          event.getPackageName().toString(),
          event.getClassName().toString()
        );
        // check componentName and do what you want
      }
    }
  }
}
于 2017-10-04T17:25:12.050 回答