首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查JellyBean中是否激活了Talkback

如何检查JellyBean中是否激活了Talkback
EN

Stack Overflow用户
提问于 2012-08-06 15:50:58
回答 4查看 6.1K关注 0票数 4

这个问题询问如何知道Android是否是活动的,直到Jelly才起作用。从Android4.1开始,这个步骤不再工作,因为提到的游标是空的。

说到这里,我想问的是,是否有办法对Jelly进行同样的检查。

编辑我试图搜索TalkBack代码,然后我找到了这里。为了检查TalkBack是否是活动的,我使用以下代码:

代码语言:javascript
复制
Intent screenReaderIntent = new Intent("android.accessibilityservice.AccessibilityService");
screenReaderIntent.addCategory("android.accessibilityservice.category.FEEDBACK_SPOKEN");
List<ResolveInfo> screenReaders = getPackageManager().queryIntentServices(screenReaderIntent, 0);
Cursor cursor = null;
ContentResolver cr = getContentResolver();
for (ResolveInfo screenReader : screenReaders) {
    cursor = cr.query(Uri.parse("content://" + screenReader.serviceInfo.packageName
            + ".providers.StatusProvider"), null, null, null, null);
    //here, cursor is not null, but calling cursor.moveToFirst() returns false, which means the cursor is empty
}

尽管如此,如果游标为空,我们如何知道TalkBack是否正在运行?

编辑2遵循@JoxTraex建议,我现在发送一个广播来询问是否启用了TalkBack:

代码语言:javascript
复制
Intent i = new Intent();
i.setAction("com.google.android.marvin.talkback.ACTION_QUERY_TALKBACK_ENABLED_COMMAND");
sendBroadcast(i);

现在我该如何收到回复呢?

我尝试将以下内容添加到清单中,但接收方没有收到任何响应:

代码语言:javascript
复制
<receiver android:name="my.package.MyBroadcastReceiver"
android:permission="com.google.android.marvin.talkback.PERMISSION_SEND_INTENT_BROADCAST_COMMANDS_TO_TALKBACK">
<intent-filter>
    <action android:name="com.google.android.marvin.talkback.ACTION_QUERY_TALKBACK_ENABLED_COMMAND" />
</intent-filter>

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-07 17:48:00

我不确定这是实现建议的最佳方法,但我通过使用以下代码成功地完成了这项工作:

代码语言:javascript
复制
Intent screenReaderIntent = new Intent("android.accessibilityservice.AccessibilityService");
screenReaderIntent.addCategory("android.accessibilityservice.category.FEEDBACK_SPOKEN");
List<ResolveInfo> screenReaders = getPackageManager().queryIntentServices(screenReaderIntent, 0);
Cursor cursor = null;
int status = 0;
ContentResolver cr = getContentResolver();

List<String> runningServices = new ArrayList<String>();
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
    runningServices.add(service.service.getPackageName());
}

for (ResolveInfo screenReader : screenReaders) {
    cursor = cr.query(Uri.parse("content://" + screenReader.serviceInfo.packageName
            + ".providers.StatusProvider"), null, null, null, null);

    if (cursor != null && cursor.moveToFirst()) { //this part works for Android <4.1
        status = cursor.getInt(0);
        cursor.close();
        if (status == 1) {
            //screen reader active!
        } else {
            //screen reader inactive
        }
    } else {  //this part works for Android 4.1+
        if (runningServices.contains(screenReader.serviceInfo.packageName)) {
            //screen reader active!
        } else {
            //screen reader inactive
        }
    }
}

也许这不是最好的方法,但这是我唯一能想到的适用于Jelly和以前的Android版本的方法。

票数 0
EN

Stack Overflow用户

发布于 2012-09-11 04:18:29

使用AccessibilityManager可以更容易地实现这一点。

代码语言:javascript
复制
AccessibilityManager am = (AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE);
boolean isAccessibilityEnabled = am.isEnabled();
boolean isExploreByTouchEnabled = am.isTouchExplorationEnabled();
票数 21
EN

Stack Overflow用户

发布于 2019-06-19 14:42:43

您可以检查启用的口头可访问性服务器。

代码语言:javascript
复制
fun Context.isScreenReaderEnabled(): Boolean {
    val accessibilityManager = getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager

    if (!accessibilityManager.isEnabled)
        return false

    val serviceInfoList = accessibilityManager.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_SPOKEN)

    if (serviceInfoList.isNullOrEmpty())
        return false

    return true
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11831666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档