如何知道Android的话语提示处于活动状态?

问题描述 投票:25回答:6

我正在开发使用话语提示,通过它来引导人们的应用程序。然而,在这些情况下,我想在应用程序的布局有些微妙的差异,以便导航更容易,也有额外的声音输出(有文字转语音),以帮助引导用户。

我的问题是,我只希望这些变化和额外的输出,如果用户有话语提示活跃。

有没有办法知道它是什么?我没有找到具体的直接访问话语提示设置什么,但我希望有某种形式的访问一般手机设置,可以让我知道我需要什么的。

问候和感谢提前。

android accessibility talkback android-accessibility
6个回答
4
投票

举一个例子,请看isScreenReaderActive()HomeLauncher.java file in the Eyes-Free shell application(经由groups thread)。

综上所述:你发现所有的屏幕阅读器的Intent,然后查询每个状态提供,看它是否处于活动状态。

如果你真的想限制它只能话语提示,您可以尝试检查来自ResolveInfo.serviceInfo.packageName回来,看它是否在话语提示包匹配每个结果的queryIntentServices()


56
投票

这样做的推荐方法是查询AccessibilityManager为无障碍服务的启用状态。

AccessibilityManager am = (AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE);
boolean isAccessibilityEnabled = am.isEnabled();
boolean isExploreByTouchEnabled = am.isTouchExplorationEnabled();

6
投票

Novoda已经发布了库调用accessibilitools其执行此检查。它查询可访问管理器检查是否有支持“语音反馈”标志启用任何无障碍服务。

AccessibilityServices services = AccessibilityServices.newInstance(context);
services.isSpokenFeedbackEnabled();

1
投票

对于我来说,我解决这样这个问题,它运作良好,在我的项目:

  1. 使用getEnabledAccessibilityServiceList()来获取所有可访问服务,其状态是开放将在这个列表中的服务
  2. 对讲包含一个名为com.android.talkback.TalkBackPreferencesActivity活动,您可以遍历列表中找到对讲服务是否打开

下面的详细代码:

    private static final String TALKBACK_SETTING_ACTIVITY_NAME = "com.android.talkback.TalkBackPreferencesActivity";

    public static boolean accessibilityEnable(Context context) {
        boolean enable = false;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            try {
                AccessibilityManager manager = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
                List<AccessibilityServiceInfo> serviceList = manager.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_SPOKEN);
                for (AccessibilityServiceInfo serviceInfo : serviceList) {
                    String name = serviceInfo.getSettingsActivityName();
                    if (!TextUtils.isEmpty(name) && name.equals(TALKBACK_SETTING_ACTIVITY_NAME)) {
                        enable = true;
                    }
                }
            } catch (Exception e) {
                if (Logging.isDebugLogging()) {
                    e.printStackTrace();
                }
            }
        }
        return enable;
}

1
投票
    AccessibilityManager am = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
    if (am != null && am.isEnabled()) {
        List<AccessibilityServiceInfo> serviceInfoList = am.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_SPOKEN);
        if (!serviceInfoList.isEmpty())
            return true;
    }
    return false;

-5
投票

打开系统设置并进入可及性和挖掘,以关再说回来选项

© www.soinside.com 2019 - 2024. All rights reserved.