繁体   English   中英

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

[英]How to detect if another application is open in Flutter?

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

当我的 Flutter 应用程序打开时,如何检测另一个应用程序(例如 Instagram 或 Twitter)是否打开?

如果这在 Flutter 中难以实现,有人可以为此功能推荐一些其他语言或代码吗?

谢谢!!

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

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

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

只需谷歌如何添加广播接收器,一个很好的例子可以在这里找到。

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

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

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

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

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

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

关于短语“有些网站包含用于流行的Android应用程序的许多广播意图的数据库”

你有网址吗? 我正在搜索,但找不到任何数据库。

我也无法将它们用于Whatsapp,Facebook ...

非常感谢你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM