【问题标题】:Detecting toast messages检测 toast 消息
【发布时间】:2016-04-01 05:23:58
【问题描述】:

我认为这是不可能的,因为我还没有在 SDK 文档中找到任何内容。

但我可以知道是否可以编写一个记录 Toast 消息的应用程序。记录显示它的应用程序以及显示的消息包含的内容。

创建一个可以检测 toast 消息的应用程序完全是个人的努力。因为我手机上的某些东西正在创建一个吐司,说“正在发送......”大约每天一次,而在我的一生中,我无法追踪有问题的应用程序(服务类)。我以为可能是 GMail 或 Evernote,但发送的 toast 消息略有不同。我打算构建一个应用程序,因为 1)我不知道 LogCat 是否会显示任何内容,以及 2)我不想让我的个人/开发手机一直插在 PC 上(作为“发送...”消息很少出现)。

【问题讨论】:

  • 你完成了你的应用并把它放到 Google Play 上了吗?
  • @divideandconquer.se 我从来没有在 google play 上发布过它,因为我只是在追踪这个问题。但它确实奏效了。该消息来自预安装的 Sim Tool Kit。从 android 4.1 开始,我从不打扰 google play,通知会告诉你是哪个应用创建了它们。
  • @divideandconquer.se 我已经根据这个问题制作了一个应用程序:play.google.com/store/apps/…
  • @mars3142 有更新您优秀应用的计划吗?它在 Android 10 中抱怨。
  • @neu242 啊,我想我错了 -> developer.android.com/preview/features/toasts - 来自后台的自定义 toast 将被阻止。 8 月,我获得了一个搭载 Android 11 的新 Pixel,因此我应该更新/重写该应用并发布 v1.0。

标签: android toast


【解决方案1】:

可以使用Accessibility Service 捕获消息/通知,看看那个。

您可以扩展类AccessibilityService 并覆盖方法onAccessibilityEvent() 来实现类似这样的功能:

public void onAccessibilityEvent(AccessibilityEvent event) {
    if (event.getEventType() != AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED)
        return; // event is not a notification

    String sourcePackageName = (String) event.getPackageName();

    Parcelable parcelable = event.getParcelableData();
    if (parcelable instanceof Notification) {
        // Statusbar Notification
    }
    else {
        // something else, e.g. a Toast message
        String log = "Message: " + event.getText().get(0) 
                   + " [Source: " + sourcePackageName + "]";
        // write `log` to file...
    }
}

注意:这对我在 Android 2.2 上不起作用,因为它似乎无法捕捉 Toasts,但它在 Android 4.0+ 上有效。

【讨论】:

  • 我试一试,结果告诉你
  • 需要一段时间才能使服务正常工作。但它奏效了。发送的 toast 消息...来自 com.android.stk
  • 效果很好。一直在寻找这个。一旦 4.0 出现在桌子上,事情有点有趣,但这解决了它:)
  • 第二个 if 语句解决了我在 3.0+ 中的问题,其中 Accessibility 通过与状态栏通知相同的事件类型发送 toast,我不知道如何将它们分开。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-04-08
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 2015-02-12
相关资源
最近更新 更多