【问题标题】:Android new outgoing call [duplicate]Android新的拨出电话[重复]
【发布时间】:2012-07-26 08:24:37
【问题描述】:

可能重复:
How to determine the sender of Broadcast Intent

我已应用新的拨出电话广播接收器。它工作正常。

但我想知道从哪个应用程序用户拨打了电话。

即来自默认拨号器或谷歌语音应用程序?

我怎么知道这个?

谢谢。

【问题讨论】:

  • 据我所知,Android 不提供任何方法来识别任何给定广播的来源。如果这是您自己的意图,您可以将该信息添加为额外信息,但总的来说(包括您的特定场景)我认为您无法找到它的来源。
  • 可能会做一些 hacky 的事情,但不能保证长期有效。我会在调试器中检查两次收到的 Intent 并检查是否有一些东西可以帮助区分两者:一个额外的、一个标志、一个类别等......但这显然不是最终的解决方案。跨度>
  • @AndréOriani,intent 由系统发送,唯一额外的就是被呼叫的电话号码,与执行呼叫的应用程序无关。

标签: android


【解决方案1】:

我的第一次尝试是获取广播源或发送广播的意图。然而,Android 并没有提供一种方法来了解这一点,他们甚至没有强调这一点,因为通常广播的内容对用户来说是有意义的。

如果是您自己的应用程序发送广播,那么正如迈克尔建议的那样,这将非常容易。您将添加一个额外的内容,将您的广播源指示给接收器。但是,您可以从 OUTGOING_CALL 意图中获得的唯一额外信息是正在拨打的电话号码。

不过,我有一个解决方案,但不能保证有效,而且纯属理论性的。风险自负。

我们的想法是检查您的接收器中最近使用的应用程序,并假设呼叫是通过 Google Voice 完成的,如果它是最近使用的应用程序之一。这是因为我们希望用户在拨打电话并且您的接收者截获该电话后立即在 Google Voice 上处于活动状态。

所以在你的接收器中,你可以这样做:

ActivityManager m = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
RecentTaskInfo task = m.getRecentTasks(3,0).get(0);
String nameofrecentlyusedapp = task.ComponentName.toString();

检查最近使用的应用程序,甚至使用 get(1) 和 get(2) 读取两个最近的应用程序以提供更大的灵活性。

试一试,让我们知道它是否有效。

【讨论】:

  • ActivityManager.getRecentTasks(int,int) (developer.android.com/reference/android/app/…, int)) 的文档中有一条注释。它说:_“这不应该用于应用程序中的核心逻辑,例如根据此处找到的信息来决定不同的行为。不支持此类使用,并且将来可能会中断”_
  • 是的,这就是为什么我说他要你自担风险。他应该尝试看看它是否有效......
猜你喜欢
  • 1970-01-01
  • 2011-04-10
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多