如何让拨号器打开时显示电话号码?

238

我不需要拨打电话号码,我只需要打开拨号器并显示该电话号码。我应该使用什么Intent来实现这个功能?

7个回答

613

有两种实现方式。

1) 通过代码启动拨号器,无需用户交互。

您需要使用 Action_Dial

使用下面的代码,将会打开拨号器并指定号码。

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:0123456789"));
startActivity(intent); 

如果不加上“tel:”前缀,会抛出以下异常:java.lang.IllegalStateException: Could not execute method of the activity.

Action_Dial不需要任何权限。

如果想直接启动电话拨号而不需要用户交互,可以使用Intent.ACTION_CALL操作。在这种情况下,必须在AndroidManifest.xml文件中添加以下权限:

<uses-permission android:name="android.permission.CALL_PHONE" />

2) 需要用户点击 "Phone_Number" 字符串来发起电话呼叫。

android:autoLink="phone" 

您需要使用带有以下属性的TextView。

android:autoLink="phone" android:linksClickable="true" 是TextView的属性

您不需要使用intent或通过此方式获取权限。


10
这很棒,它与Intent.ACTION_CALL不同之处在于它不会立即拨打电话。 - Amt87
ACTION_DIAL需要权限吗,还是只有ACCESS_CALL需要? - Marc Plano-Lesay
1
这也适用于来自丹麦的电话号码 :) 您无需在号码前添加+45。只需解析电话号码即可正常工作。 - ymerdrengene
1
我在打开新的意图后,返回按钮出现了问题。我只能通过三次返回按钮按下才能回到我的应用程序(它向我展示了几个我没有打开的拨号器屏幕 - 拨号器本身、创建新联系人屏幕、收藏夹)。有人知道如何只需按一次返回按钮即可返回应用程序吗? - kashlo
3
2012年......美好的往事。到了2018年,大公司出售用户数据,我们的应用程序需要应对Android官方的繁琐步骤才能不支持短信和电话功能。 - Josh
显示剩余4条评论

57

虽然答案有些迟,但如果您有一个显示电话号码的 TextView ,则根本不需要处理意图,只需使用 XML 属性 android:autoLink="phone" ,操作系统将自动启动 ACTION_DIAL 意图。


非常快的方法! - Taslim Oseni

21

好的,对于这个问题来说,我的回答可能会迟到得很久。但是,如果你想用Kotlin来完成它,这里只提供一个示例。

val intent = Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:<number>")
startActivity(intent)

想必对某些人会有所帮助。


3
您可以按照以下方式调用Intent:
String number = "0123456789";
        Intent intent = new Intent(Intent.ACTION_DIAL);
        intent.setData(Uri.parse("tel:" + number));
        startActivity(intent);

2
<TextView
 android:id="@+id/phoneNumber"
 android:autoLink="phone"
 android:linksClickable="true"
 android:text="+91 22 2222 2222"
 />

这是如何直接在拨号器上打开分配号码的EditText标签。

2
正如@ashishduh上面提到的,使用android:autoLink="phone"也是一个不错的解决方案。但这个选项有一个缺点,它不能处理所有长度的电话号码。例如,11位数的电话号码将无法使用此选项。解决方法是在电话号码前加上国家代码。
示例: 08034448845将无法使用
+2348034448845可以。

0

一个为使用 Kotlin 的人编写的辅助函数:

fun openDialPad(context: Context, phoneNum: String) {
    val intent = Intent(Intent.ACTION_DIAL)
    intent.setData(Uri.parse("tel:$phoneNum"))
    context.startActivity(intent)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接