219

我不需要拨打电话号码,我只需要打开拨号器并显示已显示的电话号码。我Intent应该用什么来实现这一点?

4

6 回答 6

583

有两种方法来实现它。

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

你需要Action_Dial

使用下面的代码它将打开指定号码的拨号器

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

'tel:' 前缀是必需的,否则将抛出以下异常: java.lang.IllegalStateException: 无法执行活动的方法。

Action_Dial 不需要任何权限。

如果您想直接发起呼叫而不需要用户交互,您可以使用 action 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 属性

您不需要使用意图或通过这种方式获得许可。

于 2012-07-28T09:27:49.727 回答
57

答案很晚,但是如果您有一个TextView要显示电话号码的信息,那么您根本不需要处理意图,您只需使用 XML 属性android:autoLink="phone",操作系统就会自动启动一个ACTION_DIALIntent。

于 2014-11-06T15:45:31.630 回答
14

好的,这个问题的答案将是非常晚的。但是,如果您想在Kotlin中进行,这里只是一个示例。

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

认为它可能会帮助某人。

于 2019-08-25T16:47:08.090 回答
2

正如上面提到的@ashishduh,使用android:autoLink="phone也是一个很好的解决方案。但是这个选项有一个缺点,它不适用于所有电话号码长度。例如,11 个号码的电话号码不适用于此选项。解决方案是在您的电话号码前加上国家代码。

例子:

08034448845行不通

+2348034448845

于 2017-06-04T07:58:54.350 回答
1
<TextView
 android:id="@+id/phoneNumber"
 android:autoLink="phone"
 android:linksClickable="true"
 android:text="+91 22 2222 2222"
 />

这就是您可以直接在拨号器上打开 EditText 标签分配号码的方法。

于 2017-11-07T07:41:09.503 回答
0

您可以按照以下方式调用 Intent:

String number = "0123456789";
        Intent intent = new Intent(Intent.ACTION_DIAL);
        intent.setData(Uri.parse("tel:" + number));
        startActivity(intent);
于 2021-09-13T08:32:05.800 回答