我正在开发查看书籍的应用程序.有一个显示书籍的屏幕(活动).它具有自定义视图,类似于ViewSwitcher,每个页面都是由自定义视图呈现的位图.
现在我应该实现辅助功能 - 书应该通过电话(音频)读取.
我在这里阅读了"辅助功能"部分https://developer.android.com/guide/topics/ui/accessibility/index.html但这还不够清楚.
我使用SupportLibrary进行可访问性管理,现在我在ViewGroup(管理书页)中使用了此代码.代码1:
private class EditionPagesViewSwitcherAccessibilityDelegate extends AccessibilityDelegateCompat {
private int mPageCount;
private double[] mPageRange;
@Override
public void onInitializeAccessibilityEvent(final View host, final AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(host, event);
event.setClassName(EditionPagesViewSwitcher.class.getName());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
event.setScrollable(canScroll());
}
if (event.getEventType() == AccessibilityEventCompat.TYPE_VIEW_SCROLLED && updatePageValues()) {
event.setItemCount(mPageCount);
// we use +1 because of user friendly numbers (from 1 not 0)
event.setFromIndex((int) (mPageRange[0] + 1));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
event.setToIndex((int) (mPageRange[1] + 1));
}
}
}
@Override …
Run Code Online (Sandbox Code Playgroud) 是否为Android WebView启用了辅助功能?任何人都可以告诉如何使WebView可访问?
如何以编程方式检测Android上是否启用了"大文本"辅助功能选项?
是否可以更改辅助功能焦点顺序?例如,如果我有3个视图并排,使用ids view1,view2和view3,当用户从view1向右滑动时,是否有一种简单的方法可以将辅助功能焦点转到view3?
这是我尝试过的:
我在线性布局中有以下内容.
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/imageView"
android:focusable="true"
android:nextFocusUp="@+id/imageView3"
android:nextFocusDown="@+id/imageView3"
android:nextFocusRight="@+id/imageView3"
android:nextFocusLeft="@+id/imageView3"
android:nextFocusForward="@+id/imageView3"
android:src="@drawable/ic_launcher"/>
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/imageView2"
android:focusable="true"
android:src="@drawable/ic_launcher"/>
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/imageView3"
android:focusable="true"
android:nextFocusUp="@+id/imageView2"
android:nextFocusDown="@+id/imageView2"
android:nextFocusRight="@+id/imageView2"
android:nextFocusLeft="@+id/imageView2"
android:nextFocusForward="@+id/imageView2"
android:src="@drawable/ic_launcher"/>
Run Code Online (Sandbox Code Playgroud)
然后,我启动它并将可访问性焦点放在第一个imageView上.在向右滑动以移动到下一个项目时,我希望它将可访问性焦点移动到imageView3,而是转到imageView2.
我正在编写一个辅助功能应用程序,它可以帮助用户使用语音控件和通过外部辅助工具提供的控件来浏览Android.它使用MonkeyTalk Java API来完成更重的工作.
为了帮助用户了解正在发生的事情,我们还使用了辅助功能服务,该服务会读取通知,以便用户可以更快地采取措施.
我被告知,当消息到达facebook messenger时,他们没有得到音频提示,并且检查日志我看到的是:
D/NotificationService(2665): package com.facebook.orcaText: []
Run Code Online (Sandbox Code Playgroud)
并event.getText().size()
返回0(在AccessibilityEvent事件上).
现在他们必须打开应用程序并将文本读取给他们,这是2个语音命令更多...
我正确地得到所有其他通知.我试着从facebook上寻找关于他们对可访问性的立场的文档,但我一无所获.
有没有办法从他们的通知中获取文本?
我有一个有长按动作处理程序的视图.我使用内容描述来设置消息,当视图获得焦点时,Talkback会说话.
目前它在获得焦点后立即说出了我的内容描述,并在短暂停顿后说:
双击激活,双击并按住长按
我想将此消息更改为类似的内容
双击"动作1",双击并按住"动作2"
有办法吗?
我调查了onPopulateAccessibilityEvent()
,它得到了TYPE_VIEW_ACCESSIBILITY_FOCUSED
事件,但我无法更改所需的消息.
我错过了一些简单的事吗?
我正在开发一个带有扩展服务的Android应用程序AccessibilityService
.我希望能够在不模仿可访问性框架的情况下进行测试.
有没有人对最佳方法有一些建议?
我想设置一些不同的活动,在它们之间移动,并验证我的辅助功能服务是否正确响应.我尝试使用a ServiceTestCase
,但不幸的是,这需要您自己设置服务.我不确定如何以类似于可访问性框架为我设置它的方式进行设置.
调试AccessibilityService时遇到一些问题,无法找到解决方案 - 从Eclipse的每次部署/调试中,服务都不会自动重启,需要手动操作才能重启服务.
我现在被迫做的事情:
我想以更快的方式做到这一点:
您能否建议如何在不手动重启的情况下调试辅助功能服务?
我写了一个非常简单的accessibilityService,我试图在Settings/accessibility /我的应用程序中显示该服务的描述.下面是我的所有代码,应将描述设置为"Hello!" 但设置仍显示"无可用说明"
我的服务:
public class IdleService extends AccessibilityService{
int interval = 100;
int maxIdleTime = 20000;
int idleTime = 0;
Handler mHandler;
String cProcess;
@Override
public void onServiceConnected(){
mHandler = new Handler();
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
// we are interested in all types of accessibility events
info.describeContents();
info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
// we want to receive events in a certain interval
info.notificationTimeout = interval;
setServiceInfo(info);
Log.e("IdleService", " idle service connected!");
statusChecker.run();
} …
Run Code Online (Sandbox Code Playgroud) 我的用户将使用TalkBack或其他一些Accessible Service.我想在我们的应用程序中捕获onKeyEvent事件,但事件将被分派到启用的Accessibility Services.我创建了以下基本辅助功能服务.
public class Accessibility_Service extends AccessibilityService {
private String TAG = Accessibility_Service.class.getSimpleName();
@Override
public boolean onKeyEvent(KeyEvent event) {
int action = event.getAction();
int keyCode = event.getKeyCode();
if (action == KeyEvent.ACTION_UP) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
Log.d("Hello", "KeyUp");
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
Log.d("Hello", "KeyDown");
}
return true;
} else {
return super.onKeyEvent(event);
}
}
/**
* Passes information to AccessibilityServiceInfo.
*/
@Override
public void onServiceConnected() {
Log.v(TAG, "on Service Connected");
AccessibilityServiceInfo info = new AccessibilityServiceInfo(); …
Run Code Online (Sandbox Code Playgroud)