至少在 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 行,看看应用程序是否在做某事。如果是这样,那么您可能能够确定该应用程序是否处于活动状态。此解决方案的最大问题(除了尝试读取所有用户设备上的日志之外)是这不是一个即时解决方案,并且可能需要特殊权限,具体取决于您正在使用的设备。您可能还需要设置一个主动侦听和读取日志的服务,这可能会导致大量电池消耗。