2014-09-15 5 views
0

을 onCallStateChanged 여기에 시나리오의 :두 번째 호출 - 안드로이드, TelephonyManager이

  1. 내 전화는 내가 대답 전화를 가져옵니다.

  2. 내가 전화를하는 동안 두 번째 전화가 내 전화에옵니다. 나는 첫 번째 전화를 계속한다.

  3. 두 번째 호출은 음성 메일로 곧바로 전달됩니다. 어떤 시점에서 안드로이드 애플 리케이션은 (onCallStateChanged를 통해) 알림을 얻는 것 같습니다.

  4. 첫 번째 전화를 끊으면 콜 로그에 액세스 할 수 있으며 가장 최근의 통화로 무언가가 완료됩니다 (정상적으로 작동 함).

은 정말 두 번째 통화에 대해 알아야 할, 그러나 지금 현재로, 그것에 대해 모든 액세스/알림을받을 수없는 것. 그것은 CallLog 데이터베이스에 기록되지 않고 있으며 TelephonyManager가 "듣지"않습니다.

필자는 누락 된 권한 한두 가지가 있기를 바라고 있습니다.

누구든지이 문제를 해결할 수 있습니까?

AndroidManifest.xml에 권한 (권한의 일부 앱이하는 다른 것들에 대한 있습니다) :

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
<uses-permission android:name="android.permission.READ_CALL_LOG"></uses-permission> 
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission> 
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

onCallStateChanged() 코드 :

switch(mCallState) { 

      case TelephonyManager.CALL_STATE_IDLE: 
       if (state == TelephonyManager.CALL_STATE_OFFHOOK) { 
        Toast.makeText(getApplicationContext(), "Android: NEW OUTGOING CALL", Toast.LENGTH_LONG).show(); 
       } else if (state == TelephonyManager.CALL_STATE_RINGING) { 
        Toast.makeText(getApplicationContext(), "Android: NEW INCOMING CALL", Toast.LENGTH_LONG).show(); 
       } 
       break; 

      case TelephonyManager.CALL_STATE_OFFHOOK: 
       if (state == TelephonyManager.CALL_STATE_IDLE) { 
        Toast.makeText(getApplicationContext(), "Android: CALL DISCONNECTED", Toast.LENGTH_LONG).show(); 
        // Log Phonecall (wait 5 seconds before logging) 
        Handler handler = new Handler(); 
        handler.postDelayed(new Runnable() { 
         public void run() { 
          LogPhonecall_Callog(); 
         } 
        }, 5000); 
       } else if (state == TelephonyManager.CALL_STATE_RINGING) { 
        Toast.makeText(getApplicationContext(), "Android: ANOTHER CALL WAITING", Toast.LENGTH_LONG).show(); 
       } 
       break; 

      case TelephonyManager.CALL_STATE_RINGING: 
       if (state == TelephonyManager.CALL_STATE_OFFHOOK) { 
        Toast.makeText(getApplicationContext(), "Android: CALL RECEIVED", Toast.LENGTH_LONG).show(); 
       } else if (state == TelephonyManager.CALL_STATE_IDLE) { 
        Toast.makeText(getApplicationContext(), "Android: MISSED CALL", Toast.LENGTH_LONG).show(); 
        // Log Phonecall (wait 5 seconds before logging) 
        Handler handler = new Handler(); 
        handler.postDelayed(new Runnable() { 
         public void run() { 
          LogPhonecall_Callog(); 
         } 
        }, 5000); 
       } 
       break; 
     } 

     mCallState = state; 
휴대 전화는 만 호출에 의해 인정됩니다
+0

전화가 전화를 받는지 확실하지 않습니다. 네트워크에서 음성 메일로 전환 될 수 있습니다. – Henry

+0

그래, 괜찮아. 거기에 어떤 정보가 있나요? –

답변

1

전화로 왔습니다. 음성 메일의 경우 전화가 전화로 오지 않고 대신 스위치/서버쪽에 저장됩니다. 따라서 음성 메일이 전송 될 때 AFAIK를 처리 할 수있는 방법이 없으면 음성 사서함 번호로 전화 할 때 음성 메일 만들을 수 있습니다.

+0

감사. 그것은 의미가 있지만, 로그 기록을 시도하기에는 어리 석다. 건배! –