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

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

我的问题是,我只想要这些更改和额外的输出,如果用户有话语提示活跃。

有什么办法可以知道吗? 我没有find任何具体的直接访问“话语提示”设置,但我希望有某种forms的访问一般的手机设置,可以让我知道我需要什么。

提前感谢和感谢。

Solutions Collecting From Web of "如何知道Android TalkBack是否处于活动状态?"

例如, 在Eyes-Free shell应用程序的HomeLauncher.java文件 (通过组线程 )中查看isScreenReaderActive() )。

综上所述:您可以使用Intent检测所有屏幕阅读器,然后查询每个屏幕阅读器的状态提供程序是否处于活动状态。

如果您确实只想将其限制为TalkBack,则可以尝试检查从queryIntentServices()返回的每个结果的ResolveInfo.serviceInfo.packageName ,以查看它是否与TalkBack包匹配。

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

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

Novoda已经发布了一个名为accessibilitools的库, 可以进行这个检查。 它查询可访问性pipe理器以检查是否有任何支持“语音反馈”标志的可访问性服务。

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

对我来说,我用这种方式解决了这个问题,在我的项目中效果很好:

  1. 使用getEnabledAccessibilityServiceList()获取所有的Accessibility服务,状态为open的服务将在这个列表中
  2. Talkback包含一个名为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; } 

打开系统设置并进入辅助function,然后点击closures对话选项