Android 1.6相当于EXTRA_GATEWAY_URI

时间:2010-11-02 20:10:03

标签: android google-voice

我想实现一个处理拨出电话的网关。

在最新的Android版本2.x中,我可以使用隐藏的ACTION_CALL额外字符串轻松完成此操作: “com.android.phone.extra.GATEWAY_URI”

但在早期版本中,如1.6,我不知道该怎么做。它必须是可能的,因为Google Voice正在这样做。有人可以帮助我吗?

谢谢, 灵光

2 个答案:

答案 0 :(得分:2)

嘿,伊曼纽尔, 76%的设备已经运行Android 2.x可能会浪费这些努力。姜饼预计将在今年年底推出,这将推动1.6设备的比例进一步下降。在不到半年的时间内,Android 2.x及更高版本将超过80%。只需查看平台版本分发http://d.android.com/resources/dashboard/platform-versions.html即可。也许看一下Android开源项目中的源代码。

我找到了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设备上的新手机应用程序发布......