gpt4 book ai didi

android - 在 softKey "HOME"按钮按下时停止 Android 辅助功能 UI 组件

转载 作者:行者123 更新时间:2023-11-29 15:01:53 24 4
gpt4 key购买 nike

创建了“AccessibilityService”并且能够根据输入的文本显示提示。问题是我想在主机应用程序主页按下时停止 Activity 服务。我试过添加

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask|typeViewClicked|typeViewFocused"
android:canRequestFilterKeyEvents="true"
android:accessibilityFlags="flagRequestFilterKeyEvents"
android:description="@string/accessibility_service_description" />

这样我就可以解决带有“主页”物理按钮的手机的问题。如何在 Nexus 5 等软按钮的“主页”事件时停止辅助功能服务。

最佳答案

原始问题的答案:“检测何时按下软件‘主页’按钮?”

根据 Android 文档,软键盘不需要发送硬件键盘事件,事实上 Android 示例不需要,因此应用商店中的几乎所有软件键盘都不需要。您只能依赖来自外部蓝牙和硬件键盘的事件。

简单地说,您不能可靠地做您想做的事,API 不支持它。

问题编辑的答案:

让我重申一下,没有“可靠”的方法来做到这一点。

您可以做的是监听与屏幕更改相关的事件,并检测屏幕内容何时与主屏幕匹配。现在,这仍然是一个非常脆弱的解决方案。与任何其他 Activity 相比,没有一致的方法来检测启动器 Activity ,也没有办法确定您设置的匹配器是否可能匹配不是启动器 Activity 的东西。但是,这是我认为最合理的方法。

public void onAccessibilityEvent(AccessibilityEvent e) {

switch (e.getEventType()) {
case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
case AccessibilityEvent.TYPE_VIEW_SCROLLED:
case AccessibilityEvent.TYPE_WINDOWS_CHANGED:
case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED: {
if (detectHomeScreen(getRootInActiveWindow()) {
//We are now at the "home" screen, do what you want here.
}
}
}
}
//A List of package names you know to be associated with "launcher" activities. Populate this list in your classes static initialization block.
private static ArrayList<String> LAUNCHER_PACKAGE_NAMES;

private static boolean detectHomeScreen(AccessibilityNodeInfo rootNodeInfo) {
return LAUNCHER_PACKAGE_NAMES.contains(rootNodeInfo.getPackageName().toString())
}

XML 配置

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_service_description"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagIncludeNotImportantViews|flagReportViewIds"
android:canRetrieveWindowContent="true"
android:notificationTimeout="100"
android:settingsActivity="com.example.SettingsActivity"
/>

最后一个很酷。它允许您设置将通过辅助功能服务配置屏幕右上角的“设置”按钮打开的 Activity 。

关于android - 在 softKey "HOME"按钮按下时停止 Android 辅助功能 UI 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43143084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com