This question 询问如何知道 Android Talkback 是否处于 Activity 状态;一直工作到果冻 bean 。从 Android 4.1 开始,这些步骤不再有效,因为提到的光标是空的。

话虽如此,我想问的是是否有办法在 Jelly Bean 中进行相同的检查。

编辑
我试图搜索 TalkBack 代码,我找到了 here
为了检查 TalkBack 是否处于 Activity 状态,我使用以下代码:

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:
Intent i = new Intent();
i.setAction("com.google.android.marvin.talkback.ACTION_QUERY_TALKBACK_ENABLED_COMMAND");
sendBroadcast(i);

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

我尝试将以下内容添加到 list 中,但我的接收器没有收到任何响应:
<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>

最佳答案

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

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

10-04 19:45