Как узнать, активен ли Android TalkBack?
Я разрабатываю приложение, которое использует TalkBack для управления людьми через него. Однако в таких ситуациях я хочу иметь некоторые тонкие различия в макете приложения, так что навигация проще, а также дополнительные голосовые выходы (с TextToSpeech), чтобы помочь пользователю.
Моя проблема в том, что мне нужны только эти изменения и дополнительные выходы, если у пользователя активен TalkBack.
Есть ли способ узнать, есть ли это? Я не нашел ничего конкретного для непосредственного доступа к настройкам TalkBack, но я надеялся, что есть какая-то форма доступа к общим настройкам телефона, которые могут дать мне знать, что мне нужно.
С уважением и благодарностью заранее.
Ответы
Ответ 1
В качестве примера рассмотрим isScreenReaderActive()
в файле HomeLauncher.java в приложении оболочки Eye-Free (через групповой поток).
Подводя итог: вы обнаруживаете все читатели экрана с помощью Intents, затем запрашиваете у поставщика статуса каждого, чтобы узнать, активен ли он.
Если вы действительно хотите ограничить его только TalkBack, вы можете попробовать проверить ResolveInfo.serviceInfo.packageName
для каждого результата, полученного из queryIntentServices()
, чтобы узнать, соответствует ли он пакет TalkBack.
Ответ 2
Рекомендуемый способ сделать это - запросить AccessibilityManager
для разрешенного состояния служб доступности.
AccessibilityManager am = (AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE);
boolean isAccessibilityEnabled = am.isEnabled();
boolean isExploreByTouchEnabled = am.isTouchExplorationEnabled();
Ответ 3
Novoda выпустила библиотеку под названием accessibilitools, которая выполняет эту проверку. Он запрашивает диспетчер доступности, чтобы проверить, есть ли какие-либо службы доступности, поддерживающие флаг "устной обратной связи".
AccessibilityServices services = AccessibilityServices.newInstance(context);
services.isSpokenFeedbackEnabled();
Ответ 4
Для меня я решил эту проблему таким образом, она хорошо работает в моем проекте:
- используйте getEnabledAccessibilityServiceList(), чтобы получить всю службу доступности, служба, статус которой открыт, будет в этом списке
- В Talkback есть активность с именем com.android.talkback.TalkBackPreferencesActivity, вы можете перемещаться по списку, чтобы узнать, открыт ли сервис talkback.
Детальный код ниже:
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;
}
Ответ 5
Откройте системную настройку и перейдите к доступности и нажмите, чтобы отключить опцию "Назад"