2013-02-20 9 views
0

저는 PhoneStateListener를 사용하므로 사용자가 전화를 받거나 전화를 걸 때 즉시 스피커가 켜집니다.SpeakStateListener를 사용하여 스피커를 설정하는 방법

PhoneStateListener phoneStateListener = new PhoneStateListener() 
    { 
     @Override 
     public void onCallStateChanged(int state, String incomingNumber) 
     { 
      if (state == TelephonyManager.CALL_STATE_RINGING) 
      { 


      } else if(state == TelephonyManager.CALL_STATE_IDLE) 
      { 

       AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 

       audioManager.setSpeakerphoneOn(false); 

      } else if(state == TelephonyManager.CALL_STATE_OFFHOOK) 
      { 

       AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
       audioManager.setSpeakerphoneOn(true); 
      } 
      super.onCallStateChanged(state, incomingNumber); 
     } 
    }; 

    TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 

    if(mgr != null) 
    { 
     mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); 
    } 

이것은 내가 사용하는 코드입니다. 그것은 jelly bean을 설치하기 전까지는 잘 동작했지만 이제는 사용자가 전화를받을 때만 스피커를 켜는 것으로 나타났습니다. 그러나 전화를 걸면 아무 것도하지 않습니다.

+0

상대방에서 전화가 울릴 때 이상하게, 상태가 OFFHOOK가되어야합니다 (발신 전화를 할 때) – Timmetje

답변

1

찾았습니다.

전화 통신은 수신 전화에서만 작동하는 것 같습니다.

발신 통화의 경우 intentFilter에 대해 android.intent.action.NEW_OUTGOING_CALL 문자열 매개 변수를 사용하여 브로드 캐스트 수신기를 만들고 AndroidMenifest에서 PROCESS_OUTGOING_CALLS에 대한 권한을 부여하는 것을 잊지 마십시오. 이것은 효과가있다. 발신 전화가있을 때마다 onReceive가 브로드 캐스트 리스너에서 호출됩니다.

+0

흠 당신이 저에게 java와 android dev에 새로운 것을 기쁘게 도와 줄 수 있습니까? 브로드 캐스트 리스너를 만드는 방법은 무엇입니까? – Raz

+0

그것은 말합니다 02-20 18 : 36 : 36.164 : E/AndroidRuntime (19345) : 원인 : java.lang.SecurityException : 권한 거부 : pid = 19345, uid에서 브로드 캐스트 android.intent.action.NEW_OUTGOING_CALL 브로드 캐스트를 보내지 못함 = 10183 – Raz

+0

권한이 필요합니다.이 경우 이 것을 매니페스트에 넣으십시오. 또한이 질문에 대한 답은 Java를 잘 모르기 때문에 당신이 붙잡 았던 모든 지점을 계속 묻는 것이 아닙니다. 안드로이드 개발 사이트를 읽어보십시오. 또한 SO를 검색하여 브로드 캐스트 리스너에 대한 답변을 찾으십시오. 많은 답변이 이미 있습니다. 예 : http://stackoverflow.com/questions/13134331/cannot-detect-when-outgoing-call-is-answered-in-android. – Timmetje

관련 문제