如何以编程方式拨打电话?

时间:2011-01-27 13:07:47

标签: android phone-call

我正在通过一个包来调用一个活动号码

然后,在这样的活动中,我有一个按钮来调用该号码,这是代码:

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不兼容?

11 个答案:

答案 0 :(得分:239)

你忘了打电话给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" />

答案 1 :(得分:20)

在我的手机上试过这个并且效果很好。

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

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

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

答案 2 :(得分:13)

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

用于多个有序呼叫

这用于DTMF呼叫系统。 如果呼叫下降,那么你应该在数字之间传递更多“,”。

答案 3 :(得分:6)

在选定的答案中,没有检查棉花糖许可。 它不能直接在marshmallow 6.0或以上设备中使用。

我知道为时已晚,但这个问题投票很多,所以我认为将来对其他人有帮助。

在棉花糖设备中,我们需要获得运行时许可才能进行通话......

这是在棉花糖或以上的地方打电话的例子。

How to make call in android marshmallow 6.0 or above

答案 4 :(得分:3)

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

您是否更新了清单文件以获得通话权?

答案 5 :(得分:2)

在这里,我将向您展示如何通过您的活动拨打电话。要拨打电话,您必须在应用中记下此代码。

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

如果有人在科特林寻找

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

答案 8 :(得分:0)

这不需要许可。

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(请参见Revoked permission android.permission.CALL_PHONE)。

答案 9 :(得分:0)

已解决..! 2020年9月5日。

效果很好。这样,您不需要用户的许可。您可以直接打开电话呼叫部分。

窍门,请使用 ACTION_DIAL 代替 ACTION_CALL

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

更多问题,请在Instagram上问我: @canerkaseler

答案 10 :(得分:0)

如果您最终遇到SecurityException(并且该呼叫无法进行),则应考虑请求用户进行呼叫的权限,因为这被视为危险许可:

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

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