我是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
,我会拨打第二个号码。但它没有用。
任何人都会建议我如何完成这项任务。
答案 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个数字
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"));