接收没有辅助功能的Toast消息?

时间:2017-12-12 03:37:02

标签: android android-toast

我有一个通过TTS读取通知的应用。随着谷歌改变使用辅助功能的应用政策,我改用了通知监听器,虽然这意味着我必须删除读取吐司信息的选项。我昨晚发布了这个更新,并且已经收到了想要吐司功能的人的反馈。

有没有办法在不使用辅助功能的情况下读取Toast消息?我对解决方案的搜索空洞了。

更新(2018-01-16)

在深入研究Android源代码后,我在Toast类(API 27)中找到了这个相关的方法:

private void trySendAccessibilityEvent() {
    AccessibilityManager accessibilityManager =
            AccessibilityManager.getInstance(mView.getContext());
    if (!accessibilityManager.isEnabled()) {
        return;
    }
    // treat toasts as notifications since they are used to
    // announce a transient piece of information to the user
    AccessibilityEvent event = AccessibilityEvent.obtain(
            AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED);
    event.setClassName(getClass().getName());
    event.setPackageName(mView.getContext().getPackageName());
    mView.dispatchPopulateAccessibilityEvent(event);
    accessibilityManager.sendAccessibilityEvent(event);
}

这清楚地表明,如果没有启用可访问性服务,则不会将Toast调度到AccessibilityService使用的处理程序,因此在没有启用任何服务的情况下,无法以可访问性获取它们的某种方式访问​​toast。当然,我试图避免再次创建辅助功能服务,并且不希望依赖于启用了不同服务的用户。

看来如果有任何方式可以访问没有辅助功能的toast,可能需要进行一些相当复杂的反映才能到达Toast$TN.mNextView.mViewcom.android.server.NotificationManagerService.mToastQueue和{{1} }。我现在有点头脑,因为我对反射不太熟悉,但我还在挖掘。

0 个答案:

没有答案