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

问题描述 投票:0回答:8

我不需要拨打电话号码,我只需要打开拨号器并显示已显示的电话号码。我应该使用什么

Intent
来实现这一目标?

android android-intent phone-number
8个回答
618
投票

实现它的两种方法。

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="电话" android:linksClickable="true" 一个textView属性

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


57
投票

答案很晚了,但是如果您有一个

TextView
来显示电话号码,那么您根本不需要处理意图,您只需使用 XML 属性
android:autoLink="phone"
和操作系统将自动发起一个
ACTION_DIAL
Intent。


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
投票

正如@ashishduh上面提到的,使用

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

示例:

08034448845
不起作用

但是

+2348034448845
将会


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

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


2
投票

为使用 kotlin 的人提供的辅助函数:

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

0
投票

在 Android 11 及更高版本上也可用于在清单中添加查询

  code   

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

这个需要补充

<manifest>
    <queries>
        <!-- Specific intents you query for -->
        <intent>
            <action android:name="android.intent.action.DIAL" />
        </intent>
    </queries>
</manifest>
© www.soinside.com 2019 - 2024. All rights reserved.