我不需要拨打电话号码,我只需要拨号器打开,电话号码已经显示出来。我应该使用什么意图来实现这一点?


有两种方法。

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

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


相当晚的答案,但如果你有一个TextView,你正在显示电话号码,那么你不需要处理意图在所有,你可以只是使用XML属性android:autoLink="电话"和操作系统将自动启动一个ACTION_DIAL意图。


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

例子:

08034448845无效

但是+2348034448845会


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

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


好吧,现在回答这个问题已经非常晚了。但如果您想在Kotlin中实现它,这里只是一个示例。

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

也许能帮到别人。


你可以这样调用Intent:

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

使用kotlin的辅助函数:

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