我觉得你正在做一些非常奇怪的事情。看来您正在治疗您的AccessibilityService
作为一个正常人Service
。这部分表明这是您对方法的以下实现:
public static void sendBackIntent(Context context);
@Override
public int onStartCommand(Intent intent, int flags, int startId);
只需通过这两个方法的签名和您的调用
context.startService(intent);
在你的静态方法中,我可以看出你不明白AccessibilityServices
以及他们应该如何履行自己的工作。您无法按照您尝试的方式启动辅助服务,也无法与其交互。当然,您可以使用辅助功能服务来执行全局操作,但它们不会在全局范围内准确地执行此操作,除非您从“辅助功能服务”菜单(您知道 TalkBack 显示的菜单)正确启动它们。
您的代码本质上并没有在您认为它运行的上下文中运行。因此,它运行并执行操作。但,AccessibilityServices
它们各自的力量在于它们全局连接到操作系统的能力。当您尝试使用以下方式启动服务时,android API 将无法正确绑定 AccessibilityService:
context.startService(intent);
您必须从“辅助功能服务设置”菜单启动辅助功能服务。
即使您的服务已经启动,这样的调用也是不安全的!无法保证您的用户会在打开您的活动之前启动该服务。一旦你打过电话context.startService
并尝试以这种方式启动您的 AccessibilityService,它将阻止辅助功能设置菜单启动您的服务并正确绑定到操作系统。事实上,一旦遇到这种情况,用户必须:在辅助功能设置菜单中关闭服务的开关,强制停止(甚至可能卸载)您的应用程序,重新启动设备,启动您的服务,然后启动您的活动,为了实现正确的行为。
如果不这样做,它将无法正确绑定到操作系统,并且其行为是未定义的。现在,您基本上已经在操作系统中创建了一个 hack,并且正在遇到上述未定义的行为,这些行为可能会因版本、制造商等而有很大差异,因为它的行为没有包含在 AOSP 集成测试中。
事实上,您明确不能使用以下方式启动辅助服务:context.startService()
称呼。这是 Android 的一个非常重要的安全功能,因为辅助服务可以访问屏幕内容,并且用户需要对其允许访问的提供商和应用程序进行细粒度控制。因此,虽然您可能会遇到一些行为,但这是未定义且危险的行为。你想要的是类似下面的东西:
使用以下服务配置 XML:
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_service_description"
android:accessibilityEventTypes="typeWindowContentChanged"
android:accessibilityFlags="flagRequestTouchExplorationMode"
android:canRetrieveWindowContent="true"
android:canRequestTouchExplorationMode="true"
android:accessibilityFeedbackType="feedbackGeneric"
android:notificationTimeout="100"
android:settingsActivity="com.service.SettingsActivity"
/>
以及以下无障碍服务。
class MyA11yService extends AccessibilityService {
@Override public boolean onGesture(int gestureId) {
switch (gestureId) {
case GESTURE_SWIPE_UP_AND_DOWN:
CLog.d("Performing gesture.");
performGlobalAction(GLOBAL_ACTION_BACK);
return true;
default:
return false;
}
}
}
The performGlobalAction
通话在任何情况下都可以正常工作Context
。现在,您要做的不是在 SWIPE_UP_DOWN 手势上执行此操作,而是与您希望能够触发“全局后退按钮”操作的部分建立某种进程间通信。但是,该信息是针对另一个问题的,尽管如果您理解本文中的信息,我确信您需要如何继续进行将会很清楚。