android - 如何检测 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:您可以通过“进程”和/或“PackageManager”监控 Android 设备上的进程,并查看其中一个社交媒体应用程序何时弹出。这种方法不是很可靠,因为应用程序一直处于打开状态,并且仅仅因为它们在进程列表中并不意味着它们正在被积极使用。
解决方案 3:再一次,这是一个非常“hacky”的解决方案,但您可以收听每台设备上的日志。基本上得到控制台日志的输出,阅读最后 100 行,看看应用程序是否在做某事。如果是这样,那么您可能能够确定该应用程序是否处于活动状态。此解决方案的最大问题(除了尝试读取所有用户设备上的日志之外)是这不是一个即时解决方案,并且可能需要特殊权限,具体取决于您正在使用的设备。您可能还需要设置一个主动侦听和读取日志的服务,这可能会导致大量电池使用。
推荐阅读
- android - 弹出软键盘时如何仅隐藏部分布局
- c# - .NetCore 中的 ArrayPool 是什么 - C#
- android - 应用级别的gradle文件中flutterversionNameflutterVersionCode的flutter问题
- c# - 使用辅助类中的 MVVM 模型从 WPF 应用程序获取 TextBox 名称
- jquery - Bootstrap v4 - btn-block 垂直间距?
- python - 如何过滤嵌套的 URL 列表?
- python - 是否有一种高性能的方法可以在同一台机器上的 python 进程之间共享只读数据
- c# - 单击主窗体上的按钮时隐藏用户控件中的面板
- c# - 有什么方法可以创建更新应用程序当前版本的设置?
- java - JAVA:查询两个时间戳范围内的数据