关于Android的Accessibility--创建

创建自己的Android-Accessibility应用

accessibility services在Android中的实现代表着一个应用。如Android标准应用:TalkBack
Android 1.6最开始使用,4.0有了质的提升,并且用support库兼容回1.6

因为现在基本都在4.0之上了,后续只处理4.0之上的信息

配置

相关配置信息会被存入AccessibilityServiceInfo类,可以通过setServiceInfo()来动态配置,但是支持的属性不全。

<!--
    4.1以上需要加权限
    <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"/>
-->
<application>
   <service android:name=".MyAccessibilityService"
       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/accessibility_service_config" />
   </service>
 </application>

 <!--
     res/xml/accessibility_service_config.xml
 -->
 <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:description="@string/accessibility_service_description"
    android:packageNames="com.example.android.apis"
    android:accessibilityEventTypes="typeViewClicked|typeViewFocused"
    android:accessibilityFlags="flagDefault"
    android:accessibilityFeedbackType="feedbackSpoken"
    android:notificationTimeout="100"
    android:canRetrieveWindowContent="true"
    android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity"
/>

对于不使用的事件类型不要加到过滤列表中,这会造成多个应用的事件冲突,以致影响体验
如果两个应用注册了同一个事件,那么系统会只把事件分发给第一个注册的应用

8.0及以上设备对accessibility添加了单独音频流:STREAM_ACCESSIBILITY;还可以通过上下音量键同时长按,来开启或者关闭偏好(即可设置)的accessibility service
8.0以上的软件导航栏右侧,会有一个accessibility button。点击该按钮,会根据当前的界面显示唤醒可以响应的service
8.0以上的手机支持指纹手势–只是直接的上下左右滑动–触发service,虽然指纹手势可以同时分发给多个应用,还是应该提供一个接口让用户关闭以防止多个应用之间冲突

//8.0以上设备,为了支持多语言的TTS语音切换可以做如下处理
TextView localeWrappedTextView = findViewById(R.id.my_french_greeting_text);
localeWrappedTextView.setText(wrapTextInLocaleSpan("Bonjour!", Locale.FRANCE));

private SpannableStringBuilder wrapTextInLocaleSpan(
        CharSequence originalText, Locale loc) {
    SpannableStringBuilder myLocaleBuilder =
            new SpannableStringBuilder(originalText);
    myLocaleBuilder.setSpan(new LocaleSpan(loc), 0,
            originalText.length() - 1, 0);
    return myLocaleBuilder;
}

4.0支持输入焦点变化和元素的选择变化,4.1拓展支持滑动列表以及和文字交互
全局变化:主界面,返回按钮,打开通知栏和后台程序列表
accessibility Foucs: 能让所有可见元素被accessibility service选中并且做操作

手势监听在4.1 增加

8.0支持连续手势(continued gestures),通过willContinue标志是否结束

// Simulates an L-shaped drag path: 200 pixels right, then 200 pixels down.
private void doRightThenDownDrag() {
    Path dragRightPath = new Path();
    dragRightPath.moveTo(200, 200);
    dragRightPath.lineTo(400, 200);
    long dragRightDuration = 500L; // 0.5 second

    // The starting point of the second path must match
    // the ending point of the first path.
    Path dragDownPath = new Path();
    dragDownPath.moveTo(400, 200);
    dragDownPath.lineTo(400, 400);
    long dragDownDuration = 500L;
    GestureDescription.StrokeDescription rightThenDownDrag =
            new GestureDescription.StrokeDescription(dragRightPath, 0L,
            dragRightDuration, true);
    rightThenDownDrag.continueStroke(dragDownPath, dragRightDuration,
            dragDownDuration, false);
}

没翻译通。。。
Note: Accessibility services that use Accessibility Focus are responsible for synchronizing the current Input Focus when an element is capable of this type of focus. Services that do not synchronize Input Focus with Accessibility Focus run the risk of causing problems in applications that expect input focus to be in a specific location when certain actions are taken.

收集信息包括: event detail,Process text

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值