我只是在一个根深蒂固的Nexus上运行CM7的快速背景。 我正在尝试检测拨出电话何时实际连接:已停止响铃并且您呼叫的人已应答。通过论坛来看,这似乎是一个艰难的,也许是没有答案的问题。我真的很感激任何洞察力。
在我的搜索中,我能找到的最好的是: Android : How to get a state that the outgoing call has been answered? @PattabiRaman说:“不是检测拨出呼叫连接状态,而是很容易获得上次拨打电话的持续时间。” 他是否意味着当呼叫正在进行时,应该获得上次拨打的呼叫的持续时间?当持续时间超过0时,你知道吗?
答案 0 :(得分:1)
班级com.android.internal.telephony.CallManager
应该包含有关何时实际应答呼叫的信息。它有一个公共静态方法getInstance()
,它返回CallManager实例,以及一个公共方法getActiveFgCallState()
,它将当前的调用状态返回为Call.State
枚举。
所以在理论上这样的事情可能有用:
Method getFgState = null;
Object cm = null;
try {
Class cmDesc = Class.forName("com.android.internal.telephony.CallManager");
Method getCM = cmDesc.getMethod("getInstance");
getFgState = cmDesc.getMethod("getActiveFgCallState");
cm = getCM.invoke(null);
} catch (Exception e) {
e.printStackTrace();
}
然后反复民意调查:
Object state = getFgState.invoke(cm);
if (state.toString().equals("IDLE")) {
...
} else if (state.toString().equals("ACTIVE")) {
// If the previous state wasn't "ACTIVE" then the
// call has been established.
}
我还没有确认这确实有效。即使它确实存在,您也必须记住API可能会发生变化,因为这不是应用程序开发人员应该依赖的东西。
答案 1 :(得分:0)
我查看了代码。 除非您实例化Phone对象并将其设置为默认Phone,否则它将始终为null。 但实例化它需要一些系统权限只允许系统使用。
使用此方法: com.android.internal.telephony.PhoneFactory#public static void makeDefaultPhones(Context context){