我想实现一个处理拨出电话的网关。
在最新的Android版本2.x中,我可以使用隐藏的ACTION_CALL额外字符串轻松完成此操作: “com.android.phone.extra.GATEWAY_URI”
但在早期版本中,如1.6,我不知道该怎么做。它必须是可能的,因为Google Voice正在这样做。有人可以帮助我吗?
谢谢, 灵光
答案 0 :(得分:2)
我找到了InCallScreen.java中提到的字符串。也许这为您提供了一种方法来挖掘旧的源代码,试图找出是否可以通过一些未记录的API访问它。但我的建议是不要打扰那些最后25%的1.6设备,它们会快速消失。
[更新] 由于要求使其工作,我建议您从git存储库重新编译Phone App并使其可调试,以便您可以准确地看到正在发生的事情。可能有一个运行1.6的ASOP设备是你深入了解Android如何运作的最佳选择。基本上你必须将2.x中涉及此功能的所有代码都反馈回1.6。从时间到市场的角度来看,我建议使用2.x支持获取应用程序并发布为1.6定制的第二个版本。仅仅因为1.6而延迟发布似乎是一个糟糕的商业想法。
答案 1 :(得分:0)
使用GATEWAY_URI的代码肯定是在Eclair中添加的。 在包装/ apps / Phone / src / com / android / phone / InCallScreen.java中查看AOSP,在Donut中这段代码是完全不存在的:
// If a provider is used, extract the info to build the
// overlay and route the call. The overlay will be
// displayed the first time updateScreen is called.
if (PhoneUtils.hasPhoneProviderExtras(intent)) {
mProviderLabel = PhoneUtils.getProviderLabel(this, intent);
mProviderIcon = PhoneUtils.getProviderIcon(this, intent);
mProviderGatewayUri = PhoneUtils.getProviderGatewayUri(intent);
mProviderAddress = PhoneUtils.formatProviderUri(mProviderGatewayUri);
mProviderOverlayVisible = true;
if (TextUtils.isEmpty(mProviderLabel) || null == mProviderIcon ||
null == mProviderGatewayUri || TextUtils.isEmpty(mProviderAddress)) {
clearProvider();
}
} else {
clearProvider();
}
我看不到任何其他选择。你最好的运气可能是从Donut那里拿到那个Phone应用程序,添加你需要的东西并将其作为Donut设备上的新手机应用程序发布......