2014-05-23 2 views
0

대학 시험을위한 안드로이드 응용 프로그램을 개발 중입니다.
원본 삼성 ROM, Android Jelly Bean 4.3이 포함 된 Samsung Galaxy S3을 사용합니다.Android에서 발신 통화의 상태를 관리하는 방법은 무엇입니까?

나가는 호출의 "상태"를 감지하는 데 문제가 있습니다.
음악 서비스의 재생 노래를 일시 중지했다가 다시 시작해야하기 때문에 전화가 내 응용 프로그램에서 "시작"되고 "중지"(거부 또는 거부)되었을 때를 알아야합니다.

난 이미 걸려 오는 전화로 일을하고는이 방법으로 완벽하게 작동

: 내가 매니페스트

<receiver android:name=".Music.OutgoingCallReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
     </intent-filter> 
    </receiver> 

에 수신기를 등록 발신 통화에 대한

public void onReceive(Context context, Intent intent) { 
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 

    if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
     if (Start.getMusicService().isPlaying()) { 
      pauseService(); 

      isMusicPlaying = true; 
     } 
    } 
    else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) { 
     if (isMusicPlaying){ 
      startService(); 

      isMusicPlaying = false; 
     } 
    } 
} 

과 권한을 추가

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> 

나는이 해결책을 수신기에 시도했다.

public void onReceive(Context context, Intent intent) { 
    TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
    telephonyManager.listen(new PhoneStateListener() { 
     public void onCallStateChanged(int state, String number) { 

      if (state == TelephonyManager.CALL_STATE_IDLE) { 
       if (Start.getMusicService().isPlaying()) { 
        pauseService(); 

        isMusicPlaying = true; 
       } 
      } 
      else if (state == TelephonyManager.CALL_STATE_OFFHOOK) { 
       if (isMusicPlaying){ 
        startService(); 

        isMusicPlaying = false; 
       } 
      } 
     } 
    }, PhoneStateListener.LISTEN_CALL_STATE); 
} 

나는 이미 다른 질문을 읽었으며 그 답을 찾지 못했습니다.
도와 주시면 감사하겠습니다.

안드레아

+0

onReceive가 전혀 호출되지 않고 있습니까? BroadcastReceiver를 어떻게 설정 했습니까? – Rarw

+0

@Rarw 나는 onReceive 메서드로 내 질문을 편집합니다. 매번 제대로 호출되지만 메소드를 수행 할 수 없습니다. – andrea92

+0

호출이있을 때 앱의 볼륨을 조절하려면 오디오 포커스 (https : /)를 사용할 수도 있습니다. /developer.android.com/training/managing-audio/audio-focus.html –

답변

0

메이크업 절차는 라디오의 로그 캣을 읽을 수있는, 명령 : 안드로이드 2.3에

logcat -d -b radio RILJ:D RILC:D *:S 

내 발신 전화를 걸 출력을 가지고 :

06-11 20:38:43.051 D/RILJ ( 429): [4678]< GET_CURRENT_CALLS [id=1,ALERTING,toa=145,norm,mo,0,voc,noevp,,cli=1,,1] 

을하고 대답 할 때 있어요 출력 :

06-11 20:38:50.300 D/RILJ ( 429): [4683]< GET_CURRENT_CALLS [id=1,ACTIVE,toa=145,norm,mo,0,voc,noevp,,cli=1,,1] 
,210

때문에, 거세한 숫양의 outgoingcall을 감지 나 그 로그를 캡처하고

contain time > time-when-make-outgoing-call, and 
contains string "GET_CURRENT_CALLS" and "ACTIVE". 

와 ... IT는 소니 에릭슨 - 안드로이드 2.3에 나를 위해 작동하는지 확인하는 절차를 확인 대답한다.

다른 기기 및 Android 버전에서 작동하는지 잘 모릅니다.

+0

위의 개념에 대한 자바 코드를 작성하는 방법은 안드로이드 응용 프로그램 자체에서 사용할 수 있습니까? –

관련 문제