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


193

我不需要拨打电话号码,只需要打开已经显示的电话号码的拨号器即可。我Intent应该使用什么来实现这一目标?

Answers:


531

实现它的两种方法。

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属性

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


9
那很棒,它与Intent.ACTION_CALL的不同之处在于它不会立即调用
Amt87,2013年

是ACTION_DIAL是否需要许可,还是只有ACCESS_CALL?
Marc Plano-Lesay 2013年

1
这也适用丹麦的电话号码:)您无需在号码前加+45。只需解析电话号码即可正常工作
ymerdrengene

1
以新的意图打开拨号器后,后退按钮出现问题。我只能通过按3个后退按钮来返回到我的应用程序(它向我显示了一些我没有打开的拨号器屏幕-拨号器本身,创建新的联系人屏幕,收藏夹)。有人知道如何仅需按一下后退按钮即可返回应用程序?
kashlo

2
2012 ...过去的美好时光。从政治上来说,这是正确的2018年,大公司出售用户数据,我们的应用程序需要应对Android官僚主义,才能不支持短信和电话通话。
乔什(Josh)

52

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


非常快的方法!
塔斯林·奥塞尼

7

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

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

以为这可能对某人有帮助。


2

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

例:

08034448845 不会工作

但是+2348034448845


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

这样可以直接在拨号程序上打开EditText标签分配的号码。


1

在清单中添加权限:

<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);

    }
});

这个答案是正确的,但是这个答案与问题不符。
登月
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.