【问题标题】:How to make a phone call programmatically?如何以编程方式拨打电话?
【发布时间】:2011-01-27 13:07:46
【问题描述】:

我将要通过捆绑调用的号码传递给活动

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

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 或详细说明您的错误详情
  • 在所选答案中,没有检查棉花糖权限。它不能直接在 marshmallow 6.0 或更高版本的设备中工作。 我知道我来得太晚了,但这个问题有很大的投票权,所以我认为它将来会对其他人有所帮助。在棉花糖设备中,我们需要获取运行时调用权限......这是要制作的示例叫棉花糖或以上。 How to make call in android marshmallow 6.0 or above

标签: android phone-call


【解决方案1】:

您忘记调用 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,如果该设备具有双卡,我该怎么办。是否可以通过特定的 sim 拨打电话?
  • @Dinash:看看这个已经回答的问题:stackoverflow.com/questions/13231962/call-from-second-sim
  • 我使用了相同的代码,但不能在 Galaxy S7 edge 中工作。这是我的代码 Intent intentCall = new Intent(Intent.ACTION_CALL);字符串 uri = "tel:" + number.trim(); intentCall.setData(Uri.parse(uri)); if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) { startActivity(intentCall); }
  • 这个模拟器可以不用实体设备拨打电话吗
  • 使用这个意图需要标志 FLAG_ACTIVITY_NEW_TASK 因为它在应用程序之外。
【解决方案2】:

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

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

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

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

【讨论】:

  • 数字就像 1689,,3,2,1,1 。我遇到了问题,只有 1689 ..如果您有任何解决方案,请帮助我。
  • @TeraiyaMayur 您可以先删除任何非数字字符。因此,如果您的电话号码为String number = "1689,,3,2,1,1,请执行nubmer = "tel:" + number.replaceAll("[^0-9]", "");
  • @Walk,一个问题是我们想用像,*这样的特殊符号来调用。它们必须在数字之间。在模拟器上它可以正常工作,但在设备上它会丢弃额外的符号和数字。
【解决方案3】:
 Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+198+","+1+","+1)); 
             startActivity(callIntent);

用于多个有序调用

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

【讨论】:

  • Dwivedi Ji : 数字就像 1689,,3,2,1,1 。我遇到了问题,只有 1689 ..如果您有任何解决方案,请帮助我。
  • @TeraiyaMayur,这取决于 IVRS 呼叫系统。它对我有用,因为我呼吁灭绝支持采取早期响应。
  • 是的,你是对的,我也得到了正确的有效 IVR 号码,它工作正常。谢谢
【解决方案4】:

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

您是否已更新清单文件以授予呼叫权限?

【讨论】:

    【解决方案5】:

    这不需要权限。

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

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

      • @Astor 我已经定义得很清楚了,我已经通过这个得到了分数,这意味着我的答案对某些人来说比另一个更好。
      【解决方案7】:

      它工作得很好。这样,您不需要获得用户的许可。您可以直接打开电话呼叫部分。

      诀窍,使用 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);
      }
      

      【讨论】:

        【解决方案8】:
        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);
                }
            });*
         }
        

        【讨论】:

          【解决方案9】:

          如果有人正在寻找在 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 权限。

          【讨论】:

            【解决方案10】:

            如果您最终遇到 SecurityException(并且调用不起作用),您应该考虑请求用户进行调用的权限,因为这被认为是危险的权限:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-09-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多