【问题标题】:how to show activity chooser menu when dialing in android?android拨号时如何显示活动选择器菜单?
【发布时间】:2011-06-14 19:42:57
【问题描述】:

我试图在拨号时显示活动选择器菜单。以下代码在发送电子邮件时适用于我(来自真手机,在模拟器中不起作用):

        /* Create the Intent */
    final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);

    /* Fill it with Data */
    emailIntent.setType("plain/text");
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"to@email.com"});
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject");
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Text");

    /* Send it off to the Activity-Chooser */
    this.startActivity(Intent.createChooser(emailIntent, "Send mail..."));

但是当我将代码更改为:

        Intent call = new Intent(android.content.Intent.ACTION_CALL);
    call.setData(Uri.parse("tel:" + phoneNo));
    this.startActivity(Intent.createChooser(call, "Hello there..."));

没有显示活动选择器菜单,只是直接拨号。我还想在该菜单中列出Skype。你有什么想法吗?

【问题讨论】:

    标签: android android-activity skype


    【解决方案1】:

    正如其他人在您的previous questions 中回答的那样,您确实需要阅读Intents and Filters。不过,我会给你一个快速的解释。 Intent 是 Android 应用程序可以注册处理的一种消息。如果没有安装 Skype,那么它将无法注册该Intent,因此不会出现在该菜单中。如果它 已安装但仍未显示,则意味着它没有为Intent 注册。我不知道 Android Skype 应用程序,但从您在另一个问题中链接的picture 来看,它似乎确实注册了该Intent 并会在安装时显示。

    【讨论】:

    • 这正是我的观点。但据我所知,Skype 是一个呼叫者应用程序,显然应该处理呼叫。有没有办法强制注册一个意图的应用程序?
    • 或者我如何知道第 3 方应用程序处理的意图?
    • 好吧,如果此人没有安装 Skype,您不希望 Skype 出现在该菜单上吗?如果它已安装,那么 Skype 将自行注册 Intent。除非您说已安装 Skype,但您仍然在该菜单上看不到它?
    • 是的,Skype 已安装,但我在该菜单上看不到它,甚至在菜单上也看不到它!您能否为我推荐一个类似的 2.2 应用程序,以便我进行测试?
    • 似乎 Skype 根本没有注册该意图。如果你想处理这个问题,你必须深入了解 Skype 应用程序的工作原理。我认为 Skype 没有这方面的文档,因此您必须手动完成。在查看 LogCat 的同时,打开 Skype 并开始通话。查看调用了哪些意图。您必须了解这些是如何工作的、传递了哪些数据等。您将使用未记录的 API,因此 Skype 可以随时通过更新破坏您的应用程序。
    猜你喜欢
    • 2014-01-28
    • 2020-12-22
    • 2011-05-19
    • 2015-06-26
    • 2018-12-10
    • 1970-01-01
    • 2011-05-31
    • 2016-06-21
    • 1970-01-01
    相关资源
    最近更新 更多