标签: android-accessibility

如何知道Android TalkBack是否处于活动状态?

我正在开发一个使用TalkBack引导人们通过它的应用程序.但是,在这些情况下,我希望在应用程序的布局中存在一些微妙的差异,因此导航更容易,并且还有额外的语音输出(使用TextToSpeech)来帮助指导用户.

我的问题是,如果用户激活了TalkBack,我只想要那些更改和额外输出.

有没有办法知道它是不是?我没有找到任何直接访问TalkBack设置的具体内容,但我希望有某种形式的访问通用手机设置可以让我知道我需要什么.

提前问候并表示感谢.

android accessibility talkback android-accessibility

26
推荐指数
4
解决办法
1万
查看次数

如何阅读窗口内容(使用accessibilityService)并使用绘制来激活UI而不是Android中的其他应用程序权限?

我关于同一主题的最后一个问题不够明确,并被社区搁置,后来被自动删​​除.所以,我正在以详细的方式解释该问题,以便社区能够以更好的方式理解和帮助.

我想要类似于Voodoo AppMySmartPrice优惠的功能.

现在他们做了什么

第1步:当我们第一次打开Voodoo应用程序时,他们会显示一个小教程.在教程结束时,有一个"立即激活"按钮,按下后,将我们带到辅助功能设置屏幕.

第2步:在辅助功能屏幕中,它进一步指导如何查找和无法使用Voodoo服务.

第3步:当我们启用它时,它还要求授予"观察您的操作"和"检索窗口内容"权限.

第4步:完成授予可访问性屏幕权限,移动到某个购物应用程序或通过浏览器访问购物网站并到达产品页面后,将自动弹出voodoo浮动按钮.

第5步:点击它后,它会显示其他应用或网站上可用的相同/相关/类似产品的价格,以便用户可以检查最佳可用交易.

参考Voodoo的屏幕截图

巫毒屏幕1

辅助功能屏幕

辅助功能屏幕2

权限授予屏幕

巫毒屏幕2

产品页面上的巫毒浮动按钮

Voodoo结果借助于绘制其他应用程序

现在我想知道形式社区:

  1. 如何在"辅助功能"屏幕和产品详细信息页面上显示我的帮助UI.
  2. 如何检测产品页面何时出现在屏幕上并唤起我的浮动按钮.
  3. 如何获取屏幕上显示的产品名称.
  4. 如何仅为某些应用限制此屏幕阅读功能?(因为我不想在某些版权问题上结束)
  5. 有没有可以帮助我的教程?虽然我已经尝试过谷歌的任何直接教程,但没有取得任何成功.

现在为什么我需要这些信息:

我正计划为学生提供一个应用程序,如果它可以在我的服务器上或在一些可用的网站上,它们将帮助他们免费获得所需(或类似)书籍(电子书).我想仅限于某些应用程序的功能,因为某些书籍的版权问题.

现在我从我的研究中了解到这个主题(但我不确定我是否在正确的轨道上)

java android accessibility accessibilityservice android-accessibility

22
推荐指数
1
解决办法
1万
查看次数

如何使用Android辅助功能服务的用户采取行动?

我们已开始在https://developer.android.com/guide/topics/ui/accessibility/services.html上查看适用于Android的Building Accessibility Service .根据此文档,我们可以代表用户执行自定义手势,如"为用户执行操作"部分所述,网址https://developer.android.com/guide/topics/ui/accessibility/services.html#act-for -Users.我们根据此文档提出以下问题.

1)据我们了解,用户会执行手势,我们的代码会听.我们称这些听力手势.然后,我们的代码可以为用户执行手势.我们称这些表演手势.问题是表演手势的影响 - 触摸和探索层还是触摸和探索层下面?有关其他信息,触摸和探索是Android操作系统的功能,可由辅助功能服务请求.

2)Performing Gesture是否会触发通知Accessibility Service的任何AccessibilityEvent?如果是,如果Listening Gesture和Performing Gesture都是相同的,那么可能会有递归.那就是Listening Gesture可以向右滑动,触发一些事件.进行手势也可以说是向右滑动.现在,这也将依次触发相同的事件处理程序.

3)我们如何确定Performing Gesture成功执行?如果Performing Gesture发生在触摸和探索层下面,那么整个事情就具有重要意义.

任何帮助将不胜感激.

android accessibility android-accessibility

13
推荐指数
1
解决办法
517
查看次数

使用AccessibilityService从(Facebook)RecyclerView中读取文本

如何查看非聚焦的RecyclerView子项(项目)的文本?

我的辅助功能服务应该从屏幕上读出包含关键字的文本.这在大多数情况下效果很好,除非我处理RecyclerViews,特别是那些在Facebook应用程序中的.

Facebook提要和评论屏幕都基于RecyclerView,似乎都不能让我从他们的辅助功能事件中访问我需要的文本.

我尝试过的:

public void onAccessibilityEvent(AccessibilityEvent event) {

    //I've tried looping through event.getText() and it does not contain the text entries

    //I've also tried the following (with various null checks)
    AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event);
    AccessibilityNodeInfoCompat source = record.getSource();
    List<AccessibilityNodeInfoCompat> nodes = source.findAccessibilityNodeInfosByText("...");
    //(and loop through the entries)

    //I've also tried limiting to the class name "android.support.v7.widget.RecyclerView"
    //and looking at parcelableData

    //In the facebook app, the following is always null too
    source.findFocus(AccessibilityNodeInfoCompat.FOCUS_ACCESSIBILITY);

}
Run Code Online (Sandbox Code Playgroud)

似乎没有地方包含我需要的数据.作为从帖子打开评论屏幕/叠加层的示例,我可以看到所有文本内容,除了评论本身(在回收者视图中)

我可以看到的事件详细信息的日志:

以下是我在帖子中看到的评论叠加在一个帖子上的评论

Event: EventType: TYPE_WINDOW_CONTENT_CHANGED; PackageName: …
Run Code Online (Sandbox Code Playgroud)

android facebook accessibility android-recyclerview android-accessibility

12
推荐指数
1
解决办法
730
查看次数

如何在Android中使用Accessibility收听点击并获取视图?

我想在我的Android应用程序中实现一个辅助功能服务,它可以执行以下操作:

=>获取任何应用的屏幕点击/点击.

=>获取点击/点击的视图.

最初我认为由于安全原因这样做是不可能的,但在做一些研究时我遇到了一个应用程序(本机剪贴板),它可以执行以下操作:

=> EditText从任何应用程序检测s 上的点击

=>为那些EditTexts 添加值(字符串).

我还看到了谷歌的对讲,无论你点什么,它都会说话.要说它,它需要跨应用程序访问视图(获取文本).

这些应用程序显然使用"辅助功能服务"来实现,但我想知道如何实现它?

我主要为我需要实现的东西找到教程或内容,但我正在努力寻找一些实现我的应用程序的辅助功能服务.我确实访问了Android官方文档,这对于像我这样的新手来说太技术了.(我最初更喜欢向Youtube,SO和教程网站学习).如果你能指出我介绍其他一些涵盖这些内容的教程,那也很棒.

android accessibility accessibility-api accessibilityservice android-accessibility

11
推荐指数
1
解决办法
1737
查看次数

为什么在AppCompat中删除了将内容描述添加到图像视图和图像按钮的警告,

在android中构建布局时,如果使用ImageViewImageButton而不添加内容描述,则会收到一条警告,告诉您将内容描述添加到具有的视图中,AppCompatImageView并且AppCompatImageButton该警告不再可用。我认为这是因为的实现AppCompatImageView 具有基于视图内容的默认内容描述,但是回话仍将其读取为“未标记的按钮”,为什么删除了警告?

android android-appcompat android-accessibility

11
推荐指数
1
解决办法
125
查看次数

Android O - 指纹手势回调无法正常工作

我正在测试带有指纹手势的Pixel设备上的可访问性.我试图使用FingerprintGestureController获取手势回调,但即使在我从Settings-> Accessibility打开此应用程序的辅助功能后,也从未获得任何手势.isGestureDetectionAvailable()总是向我返回false.有人可以请帮助.

这是代码:

my_gesture_service.xml

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagDefault"
android:canRequestFingerprintGestures="true" />
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml中

<uses-feature android:name="android.hardware.fingerprint"/>
    <uses-permission android:name="android.permission.USE_FINGERPRINT" />
    <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"/>
<service
            android:name="android.gestures.MyService"
            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/my_gesture_service" />
        </service>
Run Code Online (Sandbox Code Playgroud)

MyService.java

public class MyService extends AccessibilityService {

    private static final String TAG = MyService.class.getSimpleName();

    @Override
    public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
        Log.d(TAG, "onAccessibilityEvent");
    }

    @Override
    public void onInterrupt() {
        Log.d(TAG, "onInterrupt");
    }

    @Override
    protected boolean onGesture(int gestureId) {
        Log.d(TAG, "onGesture " + gestureId);
        return super.onGesture(gestureId);
    }

    @Override
    protected boolean …
Run Code Online (Sandbox Code Playgroud)

android android-gesture android-accessibility android-fingerprint-api android-8.0-oreo

9
推荐指数
1
解决办法
953
查看次数

如何使用可访问性服务从浏览器获取 url

我已启用可访问性服务权限,现在我想从地址栏中获取 url。

我试过下面的事情:

Accessibility_service_config.xml

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeAllMask"
    android:accessibilityFeedbackType="feedbackAllMask"
    android:accessibilityFlags="flagDefault"
    android:canRetrieveWindowContent="true"
    android:description="@string/accessibility_service_description"
    android:notificationTimeout="0"
    android:canRequestFilterKeyEvents="true"
    android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity" />
Run Code Online (Sandbox Code Playgroud)

访问服务.java

public class AccessService extends AccessibilityService {

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        AccessibilityNodeInfo source = event.getSource();
        if (source == null)
            return;
        final String packageName = String.valueOf(source.getPackageName());
        String BROWSER_LIST = "com.android.chrome";
        List<String> browserList
                = Arrays.asList(BROWSER_LIST.split(",\\s*"));
        if (event.getEventType()
                == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) {
            if (!browserList.contains(packageName)) {
                return;
            }
        }

        if (browserList.contains(packageName)) {
            try {
                if (AccessibilityEvent
                        .eventTypeToString(event.getEventType())
                        .contains("WINDOW")) {
                    AccessibilityNodeInfo nodeInfo = event.getSource();
                    getUrlsFromViews(nodeInfo);
                }
            } catch (StackOverflowError …
Run Code Online (Sandbox Code Playgroud)

android accessibility accessibilityservice android-accessibility

9
推荐指数
2
解决办法
1199
查看次数

Android 辅助功能 - 无法专注于 Appbar 中的任何元素

我在我的 2 个活动中遇到了这个问题。当我使用键盘 Tab 键或箭头键导航时 - 我无法到达应用栏中的任何元素。

1) 活动 1 -> 我的 appbar 有一个汉堡菜单图标来访问 NavigationView。我无法单击此图标。如果我触摸菜单图标 - 我可以使用键盘在菜单项上下导航。但是我如何进入菜单?

2) 活动 2 - 我有一个 CoordinatorLayout,里面有一个 CollapsingToolbarLayout 和一个 NestedScrollView。我能够导航到 NestedScrollView 的所有元素。但是我无法到达 CollapsingToolbarLayout 内工具栏上的任何按钮。它有一个收藏夹按钮和一个选项菜单 - 溢出图标和我总是在应用栏上显示的 1。我如何到达这些图标?

这是活动2的布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/root_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/detail_app_bar_layout"
            android:layout_width="match_parent"
            android:layout_height="@dimen/place_detail_appbar_height"
            android:elevation="@dimen/place_detail_appbarlayout_elevation">
            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/detail_collapsing_toolbar_layout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/colorPrimary"
                android:transitionGroup="false"
                app:collapsedTitleGravity="start"
                app:collapsedTitleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"
                app:contentScrim="?attr/colorPrimary"
                app:expandedTitleMarginStart="72dp"
                app:layout_scrollFlags="scroll|exitUntilCollapsed">

                <ImageView
                    android:id="@+id/detail_app_bar_photo"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:scaleType="centerCrop"
                    app:layout_collapseMode="parallax"
                    android:background="@color/colorPrimary"
                    android:contentDescription="@string/place_image"
                    android:transitionName="@string/shared_photo"
                    style="@style/ToolbarImage"/>

                <android.support.v7.widget.Toolbar
                    android:id="@+id/detail_toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/place_detail_toolbar_height"
                    android:background="@color/colorAccent"
                    app:layout_collapseMode="pin"
                    android:layout_gravity="bottom" …
Run Code Online (Sandbox Code Playgroud)

android navigation-drawer android-collapsingtoolbarlayout android-appbarlayout android-accessibility

8
推荐指数
3
解决办法
5091
查看次数

在React Native中滚动FlatList不会在Android中提供Talkback消息

我正在使用React Native的FlatList组件.当用户在Android上使用TalkBack滚动浏览FlatList时,它不会显示"向...显示项目......"

在iOS上,使用画外音滚动提供反馈(显示y的第x页).

我想知道这是否是反应原生的FlatList的差距?或者我错过了一些设置?

android accessibility react-native android-accessibility react-native-flatlist

8
推荐指数
1
解决办法
657
查看次数