至少在 Android 上是可能的。我没有为 IOS 编程,所以我不能肯定。正如 @Gaurav 指出的,该解决方案需要定制,并且可能不是特定于 Flutter 的。如果您愿意在 Flutter 之外工作,这是可能的。
再次强调,以下解决方案适用于 Android 设备:
解决方案一:由于您的目标是社交媒体应用程序,因此您可以查找每个应用程序(即 Facebook、WhatsApp 等)的公共意图,找出它们正在广播的意图的名称,并在您的应用程序中添加广播接收器。许多人会说这不是一个好主意,因为应用程序开发人员自己可以改变意图,并且您不应该监听任何尚未声明供公众使用的内容。他们可能是对的,但本次讨论是关于如何检测其他应用程序的启动,并且此方法有效。
只需谷歌一下如何添加广播接收器,就可以找到一个很好的例子here https://www.vogella.com/tutorials/AndroidBroadcastReceiver/article.html.
有些网站包含流行 Android 应用程序的大量广播意图的数据库,但如果您找不到特定应用程序的名称,那么我建议使用 ADB 来查找它。例如,Facebook 将是:
adb shell pm dump com.facebook.katana | adb shell pm dump com.facebook.katana | adb shell pm dump com.facebook.katana | adb shell pm dump com.facebook.katana | adb shell pm dump com.facebook.katana grep '过滤器' |切 -d ' ' -f 12
在某些版本的 Android 中,广播意图不起作用,但是在应用程序中注册它对我来说效果很好。
一旦正确设置了侦听器,您就可以在用户启动应用程序时检测到该应用程序并进行相应的处理。
解决方案2:您可以通过“Process”和/或“PackageManager”监视 Android 设备上的进程,并查看社交媒体应用程序之一何时弹出。此方法不太可靠,因为应用程序始终处于打开状态,并且仅仅因为它们位于进程列表中并不意味着它们正在被积极使用。
解决方案3:再说一遍,这是一个非常“hacky”的解决方案,但您可以收听每个设备上的日志。基本上获取控制台日志的输出,读取最后 100 行并查看应用程序是否正在执行某些操作。如果是这样,那么您也许能够确定该应用程序是否处于活动状态。此解决方案的最大问题(除了尝试读取所有用户设备上的日志之外)是,这不是一个即时解决方案,并且可能需要特殊权限,具体取决于您正在使用的设备。您可能还需要设置一个主动侦听和读取日志的服务,这可能会导致大量电池使用。