检测呼出电话是否已接听

54
一旦广播了 ACTION_NEW_OUTGOING_CALL,我需要捕获对方接听电话的事件。 请问如何实现?我知道这是可能的,因为 Android 拨号应用程序在被叫方接听电话时会将绿色 Android 图标更改为该人的照片。
更新:我查看了处理外拨电话的 Android 应用程序的源代码。 我注意到 ContactsUtils 中有以下方法:
/**
 * Kick off an intent to initiate a call.
 */

 public static void initiateCall(Context context, CharSequence
 phoneNumber) {
     Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
             Uri.fromParts("tel", phoneNumber.toString(), null));
     context.startActivity(intent); }

我猜我的答案就在监听Intent.ACTION_CALL_PRIVILEGED的活动中。那么,重新表达我的问题:有人知道哪个活动处理Intent.ACTION_CALL_PRIVILEGED吗?


目前无法准确检测他们何时接听电话;Caller应用程序使用内部意图来实现。 - mobilekid
是的,这也是我今天得出的结论 :-| 无论如何,谢谢。 - Shaista Naaz
2
看看这些线程。它们描述了如何检测用户接听电话的时刻。http://stackoverflow.com/questions/7929750/how-to-know-the-moment-when-the-called-person-picks-up-his-phonehttp://stackoverflow.com/questions/9513644/how-can-i-detect-when-a-call-is-answered - Mikael Svensson
你有找到实现它的方法吗?也许可以通过轮询或使用CallManager上的反射来实现:http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android/2.3.3_r1/com/android/internal/telephony/CallManager.java/?v=source? - android developer
显示剩余3条评论
4个回答

7

我认为目前还没有这样的API,同样的原因也导致无法发送DTMF信号,那就是你无法确定电话是否已经连接成功。


3

不一定需要在外部应用程序中捕获它。绿色的Android图标是控制呼叫的应用程序的一部分,因此不需要广播来更改图标。


4
是的,然而,我确实需要记录下这个事件! - mobilekid

1
就Android的电话管理器而言,您无法通过编程方式检测呼叫是否已被接听。也就是说,您没有选择知道用户何时在另一端接听电话的选项。 Android有3种电话管理器状态,但无论哪种状态都不能检测到呼出电话是否实际上已被接听。

不是真的 onCallStateChanged 正好做到了这一点。 - yams

0
唯一的方法可能是通过解析Logcat日志来实现,没有可用于此的PhoneStateListener事件。
有些人在这里要求:https://code.google.com/p/android/issues/detail?id=14266 无论如何,在Android 4.2以上版本中,由于Logcat被“沙盒化”,这可能是不可能的...

如果我们将应用程序的targetSdkVersion设置为<4.2,那么我们可以使用logcat读取系统日志吗? - Muhammad Babar
1
很抱歉,不行。因为电话应用程序的日志是沙盒化的。这与您的应用程序使用哪个SDK无关。 - Krishna Chaitanya Kornepati
不是这样的,有一个onCallStateChanged事件可以使用。 - yams

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