AccessibilityService可以在后台应用程序上执行单击事件而无需打开应用程序

问题描述 投票:0回答:1

从我的MainActivity我正在使用AccessibilityService在另一个应用程序上执行点击事件,当我打开应用程序并且它显示在屏幕上时,它可以正常工作。但是,我想在不必打开应用程序的情况下执行单击事件,它可以打开但当前不显示在屏幕上。

这可能吗?

public class DiaryAppAccessibilityService extends AccessibilityService {


@Override
protected void onServiceConnected() {
    super.onServiceConnected();
}

@Override
public void onAccessibilityEvent (AccessibilityEvent event) {


    if (getRootInActiveWindow () == null) {
        return;
    }

    AccessibilityNodeInfoCompat rootInActiveWindow = AccessibilityNodeInfoCompat.wrap (getRootInActiveWindow());

    List<AccessibilityNodeInfoCompat> messageNodeList = rootInActiveWindow.findAccessibilityNodeInfosByViewId ("com.diaryapp:id/entry");
    if (messageNodeList == null || messageNodeList.isEmpty ()) {
        return;
    }

    AccessibilityNodeInfoCompat messageField = messageNodeList.get (0);

    if (messageField.getText () == null || messageField.getText ().length () == 0
            || !messageField.getText ().toString ().endsWith (getApplicationContext ().getString (R.string.diaryapp_suffix))) { // So your service doesn't process any message, but the ones ending your apps suffix
        return;
    }

    List<AccessibilityNodeInfoCompat> sendMessageNodeInfoList = rootInActiveWindow.findAccessibilityNodeInfosByViewId ("com.diaryapp:id/send");
    if (sendMessageNodeInfoList == null || sendMessageNodeInfoList.isEmpty ()) {
        return;
    }

    AccessibilityNodeInfoCompat sendMessageButton = sendMessageNodeInfoList.get (0);


    // Now fire a click on the send button
    sendMessageButton.performAction (AccessibilityNodeInfo.ACTION_CLICK);

    @Override
    public void onInterrupt() {

    }
}

XML配置

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
xmlns:android="http://schemas.android.com/apk/res/android"
  android:accessibilityEventTypes="typeWindowContentChanged"
  android:accessibilityFeedbackType="feedbackSpoken"
  android:accessibilityFlags="flagDefault"
  android:notificationTimeout="100"
  android:canRetrieveWindowContent="true"
</accessibility-service>

我删除了这个

android:packageNames="com.diaryapp"

因为我希望该服务在其他应用程序中处于活动状态,并且能够从那里执行click事件。

java android accessibilityservice
1个回答
1
投票

您尝试做的事情不可能通过设计实现。 Accessibility API旨在帮助残障人士与手机上显示的用户界面进行互动。

© www.soinside.com 2019 - 2024. All rights reserved.