如何在显示电话号码的情况下打开拨号器?

时间:2012-07-28 09:26:11

标签: android android-intent phone-number

我无需拨打电话号码,只需拨打拨号即可显示已拨打的电话号码。我应该使用Intent来实现这一目标?

6 个答案:

答案 0 :(得分:478)

实现它的两种方法。

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

您需要Action_Dial

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

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

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

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" a textView property

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

答案 1 :(得分:49)

答案很晚,但是如果你有TextView表示你正在显示电话号码,那么你根本不需要处理意图,你可以只使用XML属性{ {1}}并且操作系统将自动发起android:autoLink="phone"意图。

答案 2 :(得分:3)

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

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

认为它可能会对某人有所帮助。

答案 3 :(得分:2)

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

示例:

08034448845无效

+2348034448845

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

在清单中添加权限:

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

制作按钮或任何小部件示例:btnCall

btnCall.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent callIntent = new Intent(Intent.ACTION_DIAL);
        callIntent.setData(Uri.parse("tel: +98990*******");
        startActivity(callIntent);

    }
});