如何以编程方式依次顺序拨打3个电话?

时间:2013-04-21 07:24:39

标签: android android-intent

我是android.i的新手,编写此代码进行调用

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

我知道有一个听众可以使用此代码找到手机的状态。

  private PhoneStateListener mPhoneListener = new PhoneStateListener() {
  public void onCallStateChanged(int state, String incomingNumber) {
  try {
  switch (state) {
  case TelephonyManager.CALL_STATE_RINGING:
  Toast.makeText(CaptureCall.this, "CALL_STATE_RINGING", Toast.LENGTH_SHORT).show();
  break;
  case TelephonyManager.CALL_STATE_OFFHOOK:
  Toast.makeText(CaptureCall.this, "CALL_STATE_OFFHOOK", Toast.LENGTH_SHORT).show();
  break;
  case TelephonyManager.CALL_STATE_IDLE:
  Toast.makeText(CaptureCall.this, "CALL_STATE_IDLE", Toast.LENGTH_SHORT).show();
  break;
  default:
  Toast.makeText(CaptureCall.this, "default", Toast.LENGTH_SHORT).show();
  Log.i("Default", "Unknown phone state=" + state);
   }
  } catch (Exception e) {
   Log.i("Exception", "PhoneStateListener() e = " + e);
  }
 }
};

实际上我拨打第一个号码并听取电话的状态。如果手机状态更改为IDLE,我会拨打第二个号码。但它没有用。

任何人都会建议我如何完成这项任务。

2 个答案:

答案 0 :(得分:0)

您可以使用以下内容拨打第一个号码吗?

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

如果不是,请添加以下内容。

       intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

使用相同的代码拨打第二个电话号码,以拨打IDLE状态中的第一个号码。

但要注意,即使在你开始拨打第一个号码之前,IDLE状态也会为真,在这种情况下,你的第二个号码将首先被调用。在IDLE状态下,如果调用第一个数字,则可以设置一个标志,然后开始调用第二个数字。

希望它有所帮助。

答案 1 :(得分:0)

如果我理解你的问题,你试图在完成上次通话后拨打电话。

这是算法,用于顺序调用n个数字

  1. 拨打号码队列
  2. 创建并注册Broadcast Receiver for PhoneState
  3. 将元素排队并激活呼叫意图
  4. 在第2点创建的广播接收器将侦听掉话状态 这是IDLE状态,
  5. 如果队列中有更多元素重复步骤3-4
  6. 否则,取消注册广播接收器。
  7. C#代码段:

                    Queue phoneNumbers = new Queue();
    
    
                    foreach (var contact in emergencyContacts)
                        phoneNumbers.Enqueue(contact.contactNo);
    
                    ShareUtils.CallToNumber(context, phoneNumbers.Dequeue().ToString());
                    var callReceiver = new CallReceiver();
                    callReceiver.onReceive += (intent) =>
                    {
                        if (intent.Extras.GetString(TelephonyManager.ExtraState).Equals(TelephonyManager.ExtraStateIdle))
                        {
                            if (phoneNumbers.Count > 0)
                            {
                                var phNumber = phoneNumbers.Dequeue().ToString();
                                ShareUtils.CallToNumber(context, phNumber);
                                Toast.MakeText(this.Activity, $"Calling {phNumber}", ToastLength.Long).Show();
                            }
                            else
                            {
                                context.UnregisterReceiver(callReceiver);
                                ((LandingActivityNew)this.Activity)?.LoadSOS_SuccessFragment();
                            }
                        }
                    };
                    context.RegisterReceiver(callReceiver, new IntentFilter("android.intent.action.PHONE_STATE"));