2013-04-21 1 views
3

나는 호출이 코드를 사용하여 휴대 전화의 상태를 찾을 수있는 수신기가 알고프로그래밍 방식으로 3 개의 전화를 순차적으로 만드는 방법은 무엇입니까?

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

을위한 초보자가이 코드를 작성 android.i하기입니다.

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

우리는 "작동하지 않습니다"모르는 것을 의미한다. 더 구체적으로 말하십시오. –

답변

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 상태가 true가되므로이 경우 두 번째 숫자가 먼저 호출됩니다. 유휴 상태에서 첫 번째 숫자가 호출되면 두 번째 숫자를 호출하기 시작할 때 플래그를 설정할 수 있습니다.

희망이 있습니다.

0

귀하의 질문을 올바르게 이해하면 이전 통화 완료 후 번호로 전화하려고합니다. 여기

순차적으로

  1. 는 PhoneState
  2. 전화에 대한 큐에서 요소 및 화재 의도
  3. 방송을위한 방송 수신기를
  4. 만들기 전화 등록 번호의 큐를 확인 n 개의 번호를 호출하기위한 알고리즘입니다 지점 2에서 생성 된 수신기는 IDLE 상태 인 호 손실 상태 을 수신 대기하고,
  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")); 
관련 문제