如何以编程方式打电话?

我传递给一个活动一个捆绑包要调用的数字

然后,在这样的活动中,我有一个按钮来呼叫那个号码,这是代码:

callButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(bundle.getString("mobilePhone")));
}
});

有点不对劲,因为当我按下按钮的时候什么都没有发生。

我做错了什么?

PD: 我正在使用 Android 1.5兼容项目... 也许电话不兼容1.5?

142295 次浏览

您忘了调用 startActivity,它应该是这样的:

Intent intent = new Intent(Intent.ACTION_CALL);


intent.setData(Uri.parse("tel:" + bundle.getString("mobilePhone")));
context.startActivity(intent);

意图本身只是一个描述事物的对象,它不做任何事情。

不要忘记将相关权限添加到您的清单:

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

看看这里: http://developer.android.com/guide/topics/intents/intents-filters.html

您是否更新了您的清单文件,以便给予通话权?

 Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+198+","+1+","+1));
startActivity(callIntent);

用于多次有序呼叫

这是用于 DTMF 呼叫系统。 如果调用是滴然后,你应该传递更多的“ ,”之间的数字。

我在手机上试过了,效果很好。

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:900..." ));
startActivity(intent);

在清单文件中添加此权限。

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

在这里我将向你展示如何从你的活动中拨打电话。要打电话,你必须把这个代码放在你的应用程序。

try {
Intent my_callIntent = new Intent(Intent.ACTION_CALL);
my_callIntent.setData(Uri.parse("tel:"+phn_no));
//here the word 'tel' is important for making a call...
startActivity(my_callIntent);
} catch (ActivityNotFoundException e) {
Toast.makeText(getApplicationContext(), "Error in your phone call"+e.getMessage(), Toast.LENGTH_LONG).show();
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button = (Button) findViewById(R.id.btn_call);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String mobileNo = "123456789";
String uri = "tel:" + mobileNo.trim();
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse(uri));
startActivity(intent);
}
});*
}

如果有人在找 在 Kotlin

    val  uri = "tel:+800******"
val call_customer_service = Intent(Intent.ACTION_CALL)
call_customer_service.setData(Uri.parse(uri))
startActivity(call_customer_service)

像其他一些解决方案一样,它需要 android.permission.CALL_PHONE许可。

这不需要许可。

val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:+123456"))
startActivity(intent)

或者

val intent = Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", "+123456", null))
startActivity(intent)

但它显示了一个更多的对话框(询问您是否要打电话只打一次或总是)。因此,最好使用带权限的 ACTION_CALL(参见 撤销权限 android.permission. CALL _ PHONE)。

它工作的非常好。这样,你从用户 不需要得到许可。你可以直接打开电话呼叫部分。

诀窍是,用 ACTION _ DIAL 代替 开始

private void callPhoneNumber() {
String phone = "03131693169";
Intent callIntent = new Intent(Intent.ACTION_DIAL);
callIntent.setData(Uri.parse("tel:" + phone));
startActivity(callIntent);
}

如果最终出现 SecurityException (调用无法工作) ,则应考虑请求用户权限进行调用,因为这被认为是一种危险的权限:

ActivityCompat.requestPermissions(
activity,
new String[] {Manifest.permission.CALL_PHONE},
1
);

请注意,这与清单权限(您也必须具有)无关