2013-04-21 45 views
3

我新手android.i写代码拨打电话如何以编程方式一个接一个地打3个电话?

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,我拨打第二个号码。但它不起作用。

任何一个PLZ建议我如何做到这一点。

+1

我们不知道什么是 “实在不行” 的意思。更加详细一些。 – 2013-04-21 07:29:00

回答

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状态下,如果调用第一个数字,则可以设置一个标志,然后开始调用第二个数字。

希望它有帮助。

0

如果我正确理解您的问题,您正尝试在先前的呼叫完成后拨打一个号码。

这里是算法调用n个数依次

  1. 使数字排队叫
  2. 创建和注册广播接收器PhoneState
  3. 出列元素和消防意向的呼叫
  4. 广播在点2创建的接收器将侦听处于空闲状态的掉话状态 ,
  5. 如果队列中的更多元素重复步骤3-4
  6. 否则,取消注册广播接收器。

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")); 
相关问题