【问题标题】:How to detect if another application is open in Flutter?如何检测 Flutter 中是否打开了另一个应用程序?
【发布时间】:2019-12-14 02:04:47
【问题描述】:

[已编辑] 我想创建一个不鼓励使用社交媒体应用程序的应用程序。就像他们打开 Instagram 或其他东西一样,Flutter 应用程序就会知道。

当我的 Flutter 应用打开时,我如何检测其他应用(例如 Instagram 或 Twitter)是否打开?

如果这在 Flutter 中难以实现,谁能推荐一些其他语言或代码来实现这个功能?

谢谢!!

【问题讨论】:

  • 没有这样的功能。唯一的功能将是定制的并且非常笨重。
  • 你的目标是什么?也许还有另一种方式来做你想做的事。

标签: android ios flutter dart


【解决方案1】:

至少在 Android 上是可能的。我不为IOS编程,所以我不能肯定。正如@Gaurav 指出的那样,该解决方案需要定制,并且可能不会特定于 Flutter。如果你愿意在 Flutter 之外工作,那是可能的。

再次强调,以下解决方案适用于 Android 设备:

解决方案 1: 由于您的目标是社交媒体应用程序,因此您可以查找每个应用程序(即 Facebook、WhatsApp 等)的公共意图,找出它们正在广播的意图的名称并在您的应用程序中添加广播接收器。许多人会说这不是一个好主意,因为应用程序开发人员自己可以改变意图,并且您不应该听任何尚未宣布供公众使用的东西。他们可能是对的,但是这个讨论是关于如何检测其他应用程序启动并且这种方法有效。

简单google一下如何添加广播接收器,一个很好的例子可以找到here

有些网站包含用于流行 Android 应用程序的大量广播意图的数据库,但如果您无法找到某个特定应用程序的名称,那么我建议您使用 ADB 来查找它。例如,Facebook 将是:

adb shell pm dump com.facebook.katana | grep '过滤器' |剪切 -d ' ' -f 12

在某些版本的 Android 广播意图中不起作用,但在应用程序中注册它对我来说效果很好。

一旦您正确设置了侦听器,您就可以在用户启动应用时检测到应用并相应地对其进行处理。

解决方案 2: 您可以通过“Process”和/或“PackageManager”监控 Android 设备上的进程,并查看其中一个社交媒体应用程序何时弹出。这种方法不是很可靠,因为应用程序一直处于打开状态,并且仅仅因为它们在进程列表中并不意味着它们正在被积极使用。

解决方案 3: 同样,这是一个非常“hacky”的解决方案,但您可以在每台设备上收听日志。基本上得到控制台日志的输出,阅读最后 100 行,看看应用程序是否在做某事。如果是这样,那么您可能能够确定该应用程序是否处于活动状态。此解决方案的最大问题(除了尝试读取所有用户设备上的日志之外)是这不是一个即时解决方案,并且可能需要特殊权限,具体取决于您正在使用的设备。您可能还需要设置一个主动侦听和读取日志的服务,这可能会导致大量电池消耗。

【讨论】:

  • 哇。感谢您的详细建议。标记为已解决。
  • 没问题,乐于助人。另外,欢迎来到 SO!发帖愉快。
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多