我尝试在Android O中使用AccessibilityService,但它没有创建此服务。
清单:
<service
android:name=".AccessService"
android:label="@string/app_name"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" />
</service>XML配置:
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/app_name"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagRequestFilterKeyEvents|flagIncludeNotImportantViews"
android:accessibilityFeedbackType="feedbackAllMask"
android:notificationTimeout="100"
android:canRetrieveWindowContent="true"
android:canRequestFilterKeyEvents="true"
android:settingsActivity="com.example.test.MainActivity"
/>我为扩展的AccessibilityService类的所有方法添加了日志输出,但是onCreate从未被调用过。我可以在Android设置中激活该服务,并将其绑定到两个音量按钮,如果我同时按下这两个按钮,他总是说现在激活了。它没有说禁用或类似的东西。Android设置页面显示其处于活动状态。
我的AccessibilityService类只有日志输出。我在这节课上什么也没做。
我错过了什么吗?在Android O中还有什么是我必须做的吗?我基于本教程进行了尝试:https://developer.android.com/guide/topics/ui/accessibility/services.html
我想接住长按音量键。
发布于 2017-05-21 17:37:53
不清楚你说它没有创建服务是什么意思,因为你还说Android设置页面识别它是活动的。
我尝试创建一个可访问性服务来在Android O上运行它,它似乎起作用了。
这是我的服务,正如你所说的,你的服务的行为,只是记录:
public class LoggingA11yService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
Log.d("!!!", "onAccessibilityEvent: " + event);
}
@Override
public void onInterrupt() {
Log.d("!!!", "onInterrupt");
}
}有必要在清单中声明此服务,并在XML中为其提供配置(一些属性可以通过编程方式进行配置,但所有属性都可以通过XML进行配置,因此这是首选方法):
<application>
<service android:name=".LoggingA11yService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
android:label="@string/accessibility_service_label">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibilityservice" />
</service>
<activity ...
</application>@xml/accessibilityservice
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackSpoken"
android:accessibilityFlags="flagDefault"
android:canRetrieveWindowContent="true"
android:description="@string/accessibility_service_description"
android:notificationTimeout="100" />然后,只需通过导航到设置>可访问性> LoggingA11yService > toggle来启用服务,就可以激活它。
我可以在logcat中看到我使用设备时的输出,例如:
05-21 10:34:25.848 15998-15998/com.novoda.androidskeleton D/!!!:
onAccessibilityEvent: EventType: TYPE_WINDOW_STATE_CHANGED;
EventTime: 113655863; PackageName: com.android.settings;
MovementGranularity: 0; Action: 0 [ ClassName: com.android.settings.SubSettings;
Text: [Label Logging A11y Service]; ContentDescription: null;
ItemCount: -1; CurrentItemIndex: -1; IsEnabled: true;
IsPassword: false; IsChecked: false; IsFullScreen: true;
Scrollable: false; BeforeText: null; FromIndex: -1; ToIndex: -1;
ScrollX: -1; ScrollY: -1; MaxScrollX: -1; MaxScrollY: -1;
AddedCount: -1; RemovedCount: -1; ParcelableData: null ];
recordCount: 0注意,文档说如果有多个服务可以处理相同的事件,那么它们只会在服务提供不同类型的反馈的情况下将事件发送给所有服务。否则,注册的第一个服务将收到事件-通过在测试您的服务时禁用任何其他可访问性服务来检查这是否不是您的情况。
https://stackoverflow.com/questions/44045059
复制相似问题