【问题标题】:Android: Dialing a custom number once call picked upAndroid:接听电话后拨打自定义号码
【发布时间】:2014-09-05 01:28:42
【问题描述】:

我正在开发一个接听电话的应用程序,在通话期间,它会在拨号盘中输入以前保存或复制的号码。首先,我想知道这是否可能。其次,我一直在想一些想法,但我不知道它们可能有多疯狂,因为我对 Android 还比较陌生,对它的局限性知之甚少:

  1. 在剪贴板中存储一个号码,并通过某种方式在通话屏幕中单击粘贴,这会将号码简单地粘贴到拨号器中
  2. 获取存储在剪贴板中的数字中的每个数字,并以编程方式按下用户可能会触摸的电话键盘上的按键
  3. 在我自己的应用程序中打开来电,该应用程序可以接听电话并能够在拨号器中粘贴/添加号码
  4. 覆盖调用中弹出的数字键盘上的一个键(比如退格键),然后重新编程它以执行我想要的功能(因此,它会输入保存的号码)

这些都可能吗(为什么或为什么不)?或者你能建议任何其他方式来完成我想要的吗?谢谢,非常感谢。

编辑:让我更具体一点。这是我的目标屏幕:

我需要 some 方法将自定义数字输入此字段。无论如何,我只需要一个线索或提示让我走上正轨。我见过人们制作自定义拨号器的应用程序,但他们所做的只是输入输入的号码并拨打电话。如果我必须制作自己的应用程序,它必须能够接听电话或访问接听电话,并填充上述字段,或者它自己的字段,以提供相同的功能。

【问题讨论】:

  • “我正在开发一个接听电话的应用程序,在通话期间,它会在拨号盘中输入以前保存或复制的号码。” - 你能用一个以上的句子来描述这个问题吗? “自定义号码”是什么意思?另外,“接听电话的应用程序”是什么意思?
  • @RajV 好吧,我的意思是,如果它检测到某个来电号码(用户可以设置的自定义号码),那么我的应用程序将接听电话而不是默认应用程序,并且我将能够灵活地在我自己的应用程序中将数字输入拨号盘。这是假设我不能将任何数字添加到默认应用程序拨号器(在通话中),以及允许我编写一个应用程序来接听并处理它而不是默认的 android 应用程序.这是否更有意义?谢谢!
  • 看我的回答。要接听来电,您需要使用内部 ITelephony 对象。同样有一种拨号方法,可以让您在拨号盘中输入几个数字。如果成功了,就不需要编写自己的拨号器了。
  • @RajV 谢谢,拉吉!我很高兴能尝试一下。
  • @capcom 您在通话过程中成功拨出号码?

标签: android


【解决方案1】:

我认为没有相应的 API

我现在想到的最好方法是在通话期间(可能通过 Receiver)打开一个应用程序,其中包含一个可以输入文本的 TextView

那么您可以在这里拨打电话:

Intent intentCall = new Intent(Intent.ACTION_CALL, Uri.fromParts("tel", phoneNumber, null));
startActivity(intentCall);

但我不知道手机应用会如何反应

【讨论】:

  • 非常感谢您的回答。但据我了解,intentCall 不是要开始一个新电话吗?不在当前通话中拨打另一个电话?
  • 是的,这是遗漏的部分。我不知道当前通话将如何处理这个新意图,它会停止通话并拨打新电话,还是会暂停通话并拨打新电话:s?
  • 我想我会尝试一下,但我不希望它起作用:(必须有办法做到这一点!
【解决方案2】:

根据您给出的描述,您似乎需要使用电话管理器界面。 你可能会面临这个想法的问题,你将试图以编程方式接听电话并有效地改变电话状态。换句话说,您需要 MODIFY_PHONE_STATE 权限。此权限现在仅限于系统应用程序,从 Gingerbread 开始。 如果没有这个基本的许可,我认为你的应用想法不会很可行。此外,由于您将尝试以编程方式输入数字,我假设这是为了发送 DTMF 音调,因此您会遇到应用程序无法访问 Android In Call Data 的问题。 截至目前,缺少对 Android 中正确电话包的支持。 我希望以上内容能澄清您的一些问题。

【讨论】:

    【解决方案3】:

    如果我理解正确,您希望应用在接到电话后在拨号盘中输入几个数字。

    以下可能是值得尝试的选项。

    使用Java reflection获取内部com.android.internal.telephony.ITelephony对象。 Details here。然后调用dial() 方法。此方法只是将数字添加到拨号盘,但实际上并不发起电话呼叫。这可能对你有用。

    【讨论】:

    • 谢谢!我现在正在研究这个。
    • 您知道我在哪里可以找到该对象的文档吗?例如,我在任何地方都找不到 API 中的 dial() 函数。谢谢。
    • 只是想让你知道我试过了,但没用。通话结束后,它会将号码放入拨号器,但在通话进行时不会放入活动拨号器(如我原始帖子中的图片所示)。如果您想查看我的代码以了解是否可以解决任何问题,那就太棒了。再次感谢,我希望它有效:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 2018-03-09
    相关资源
    最近更新 更多