【问题标题】:Can an android application get information from other applications?android 应用程序可以从其他应用程序获取信息吗?
【发布时间】:2016-08-02 13:56:05
【问题描述】:

我是安卓开发新手。我开始知道 Intent 和 Intent 过滤器 可用于在应用程序之间共享数据,但我想知道是否有可能设计一个 android 应用程序,它可以在后台运行时从其他应用程序中提取一些特定信息.例如,如果用户正在使用 whatsapp,它可能会知道通话掉线率,或者如果在 YouTube、Facebook 或 Netflix 的用户终端上正在播放视频,它将获得缓冲播放时间、视频比特率等。我将非常感激如果这个问题的答案提供了一个例子。

【问题讨论】:

  • 它可以,如果其他应用程序允许并明确公开此功能
  • 您要查找的内容通常称为 ContentProvider。不过,并非所有应用都公开一个
  • 亲爱的@TimCastelijns,我想知道我是否可以为 YouTube、Netflix、Facebook 和一些 VoIP 应用程序(如 whatsapp、Skype 或 Google hangout)做到这一点
  • 你为什么要找我告诉我这个?

标签: android


【解决方案1】:

没有,基本上没有

但是,正如 Tim Castelijns 所写,如果“目标”应用程序允许,例如通过内容提供商,这是可能的。

在有根设备上,经过长时间对目标应用程序进行逆向工程后,也有可能获得一些信息。也只能来自有根设备。

其他情况是您编写了多个应用程序和设计,它们可以一起通信,例如通过意图、内容提供程序。

还可以获取正在运行的应用列表(用户必须允许)

【讨论】:

  • 也可以获取正在运行的应用列表有什么用处
  • @TimCastelijns 安装和/或运行的应用程序列表对用户来说意义重大。有 stackoverflow 应用程序,你是一个超级极客,有 200 个应用程序?一定也意味着什么。有火种/磨床/什么?上面写着你的 sx 方向。
  • 这是一个相当肤浅的结论。无论如何,用户的个人兴趣与这个问题无关。
  • @TimCastelijns 我以为你在问它可以用来做什么。我的错。
【解决方案2】:

在 Android 中,每个应用程序都在自己的“sandbox”上运行,该“sandbox”应该与设备上运行的其他应用程序隔离。

为了让应用程序与其他应用程序通信,Android 框架提供了几种机制来向/从其他应用程序发送/接收数据:IntentsIPC (AIDL)Content Providers 等...

每个想要向设备上的其他应用程序公开其数据的应用程序都需要使用上述一种或多种机制来实现接口。

这意味着如果一个应用程序没有实现一个接口来公开它的数据或内部工作,那么另一个应用程序就不可能访问这些信息。

请注意,某些应用程序选择将其部分数据保存在公开可用的磁盘空间中(例如,拍摄照片的相机可能会将它们保存在所有应用程序都可以访问的 SD 卡上)。在这种情况下,如果您知道要查找什么,就可以了解某些应用程序的某些信息。

此外,Android操作系统暴露了几个全局设置的状态如:Device's connectivity stateBattery state、当前打开的蓝牙接口、running applicationslast executed apps等...

这种配置可能会让您对设备上发生的事情有一个整体的了解。

【讨论】:

    【解决方案3】:

    如其他答案所示,您主要受限于明确向您提供的应用程序;事实上,精心设计的应用程序通常会尝试防止“信息泄露”超出它们实际想要提供的范围。

    其他一些人提到了内容提供者,但另一个需要研究的结构是广播。如果应用程序在本地广播意图(即使用本地广播管理器),您将无法看到它,但如果他们使用“系统范围”广播或接收另一个“系统范围”广播,您可以接收同一事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 2012-04-26
      相关资源
      最近更新 更多