以编程方式从本机呼叫应用程序中调用Android应用程序中的号码

时间:2015-09-02 11:27:16

标签: android

我使用以下许可从我的应用程序拨打电话

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

这是我打电话的代码。

 Intent iniCall=new Intent(Intent.ACTION_CALL);
 iniCall.setData(Uri.parse("tel:9849199291");
 startActivity(iniCall);   

但它启动Skype应用程序而不是启动默认呼叫应用程序。

如何从默认呼叫应用程序调用?

4 个答案:

答案 0 :(得分:11)

对于Pre-Lollipop设备,您需要使用com.android.phone作为软件包名称,而在Lollipop中,您需要使用com.android.server.telecom作为软件包名称。

试试这段代码:

Intent iniCall=new Intent(Intent.ACTION_CALL);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
   iniCall.setPackage("com.android.server.telecom"); 
}else{
   iniCall.setPackage("com.android.phone"); 
} 
iniCall.setData(Uri.parse("tel:"+9849199291);
startActivity(iniCall); 

我希望它有所帮助!

答案 1 :(得分:1)

主要活动代码:

  button.setOnClickListener(new OnClickListener() {

    @Override
   public void onClick(View arg0) {
    String phnum = edittext.getText().toString();
    Intent callIntent = new Intent(Intent.ACTION_CALL);
    callIntent.setData(Uri.parse("tel:" + phnum));
    startActivity(callIntent);
   }
  });

清单:

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

答案 2 :(得分:0)

我个人更喜欢不需要许可的方法,但确实要求用户按下拨号盘,如下所示:

Uri uri = Uri.parse("tel:" + number);
Intent callIntent = new Intent(Intent.ACTION_DIAL, uri);
context.startActivity(callIntent); 

答案 3 :(得分:-2)

我知道这是个愚蠢的问题,但该设备有SIM卡吗?它应该启动“call”事件的默认应用程序,可以在“设置”中设置。所以有两种选择:

  1. 您的设备没有SIM卡(插槽),因此手机应用程序不会显示。
  2. 您的设备默认应用程序呼叫Intent是Skype,因此不会要求您选择。