在Flutter中如何检测另一个应用程序是否已打开?

4
我想创建一个应用程序,可以阻止使用社交媒体应用程序。比如当他们打开Instagram之类的应用时,Flutter应用程序就会知道。
当我的Flutter应用程序启动时,如何检测其他应用程序(例如Instagram或Twitter)是否已打开?
如果在Flutter中实现这个功能很困难,有人能否建议其他语言或代码来实现这个功能?
谢谢!!

那里没有这样的功能。唯一的功能将是定制的,而且非常笨拙。 - Gaurav Mall
你的目标是什么?也许有其他方法可以实现你想要的。 - AmazingBite
你找到了其他的解决方案吗? - Ninad7N
1个回答

4
至少在Android上是可能的。我不会为IOS编程,所以不能肯定。正如@Gaurav所指出的,解决方案需要定制,并且可能不特定于Flutter。如果你愿意在Flutter之外工作,那就有可能。
以下解决方案均适用于Android设备:
解决方案1:由于您的目标是社交媒体应用程序,因此您可以查找每个应用程序(即Facebook、WhatsApp等)的公共意图,找出它们正在广播的意图名称,并在您的应用程序中添加广播接收器。许多人会说这不是一个好主意,因为应用程序开发者自己可以更改意图,而且你不应该监听任何未声明为公共使用的内容。他们可能是对的,但这个讨论是关于如何检测其他应用程序的启动,而这种方法可以解决问题。
只需谷歌如何添加广播接收器,可参考此处的良好示例。
有些网站包含了流行Android应用程序的许多广播意图的数据库,但如果您找不到特定的广播意图,请使用ADB查找。例如,Facebook将成为:
adb shell pm dump com.facebook.katana | grep ' filter' | cut -d ' ' -f 12
在某些版本的Android中,广播意图可能无效,但在应用程序中注册后,它可以很好地工作。
一旦您正确设置了监听器,您就可以在用户启动应用程序时检测该应用程序并相应地处理它。
解决方案2:您可以通过“进程”和/或“PackageManager”监视Android设备上的进程,并查看社交媒体应用程序何时弹出。此方法不是非常可靠,因为应用程序一直在运行,而且只是因为它们在进程列表中并不意味着它们正在被积极使用。
解决方案3:同样,这是一个非常“hacky”的解决方案,但您可以侦听每个设备上的日志。基本上获取控制台日志输出,读取最后100行并查看应用程序是否在做某些事情。如果是,则可以确定应用程序是否处于活动状态。这种解决方案最大的问题(除了尝试在所有用户的设备上阅读日志之外)是这不是一个即时的解决方案,并且可能需要根据您正在使用的设备特权。您还可能需要设置一个主动侦听和读取日志的服务,这可能会导致一些显着的电池使用。

1
哇,感谢您提供详细的建议。已标记为已解决。 - Robert Wong
1
没问题,很乐意帮忙。同时欢迎来到SO!祝你发帖愉快。 - steven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接