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


123

我正在将一个要通过捆绑呼叫的号码传递给活动

然后在这样的活动中,我有一个按钮可以拨打该号码,这是代码:

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


请粘贴logcat o / p或详细的ur错误详细信息
chikka.anddev,2011年

Answers:


259

您忘记了调用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" />

嗨@Lior如果该设备具有Dual-SIM,我该怎么办。是否可以通过特定的SIM卡拨打电话?
Dinash

3
@Dinash:看看这个已经回答的问题:stackoverflow.com/questions/13231962/call-from-second-sim
Lior

我使用了相同的代码,但无法在Galaxy S7 edge中使用。这是我的代码Intent intentCall = new Intent(Intent.ACTION_CALL); 字符串uri =“ tel:” + number.trim(); intentCall.setData(Uri.parse(uri)); 如果(ActivityCompat.checkSelfPermission(getApplicationContext(),Manifest.permission.CALL_PHONE)== PackageManager.PERMISSION_GRANTED){startActivity(intentCall); }
AngelJanniee

可以使用此模拟器在没有物理设备的情况下拨打电话吗
下拨打电话吗?

24

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

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

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

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

1
数字就像1689,,3,2,1,1。我收到的问题是只有1689 ..如果您有相同的解决方案,请帮助我。
Teraiya Mayur

@TeraiyaMayur,您可以先删除任何非数字字符。因此,如果您也有电话号码,String number = "1689,,3,2,1,1nubmer = "tel:" + number.replaceAll("[^0-9]", "");
步行

@Walk,一个问题是我们要使用特殊符号(如)进行调用,*。它们必须在数字之间。在仿真器上,它可以正常工作,但在设备上,它可以删除其他符号和数字。
CoolMind

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

用于多个订购的电话

这用于DTMF呼叫系统。如果呼叫掉线,则应在数字之间传递更多“”。


Dwivedi Ji:数字就像1689,,3,2,1,1。我遇到的问题是只有1689 ..如果您有相同的解决方案,请帮助我。
Teraiya Mayur

@TeraiyaMayur,这取决于IVRS呼叫系统。由于我的绝种支持,它对我的​​工作需要尽早回应。
Dwivedi Ji 2015年

是的,您是对的,我也获得了正确的有效IVR号码,并且工作正常。谢谢
Teraiya Mayur'Aug

6

在所选答案中,没有检查棉花糖的权限。它不能在棉花糖6.0或更高版本的设备中直接运行。

我知道我为时已晚,但是这个问题获得了很大的赞成票,因此我认为这对将来的其他人会有帮助。

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

这是使用棉花糖或以上制成的电话的示例。

如何在Android棉花糖6.0或更高版本中拨打电话



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

1
@Astor我已经非常清楚地定义了它,我已经从中获得了一些要点,这意味着对于某些人来说,我的回答要比其他的要好。
Pir Fahim Shah 2013年

2

这不需要许可。

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


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

0

如果有人在科特林寻找

    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获得许可。

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.