마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

통화종료 소스(ITelephony)에 관해 질문드려요.

0 추천

재다이얼해주는 소스를 작성중인데

타이머 후 폰이 통화상태가 아닐경우 종료하는 부분인데, 종료가 되지않습니다.

퍼미션이나 ITelephony.aidl 은 모두 맞게 해준거 같은데.. 어느부분이 문제인지 알수가없네요..ㅠ

고수분들의  불필요한부분이 있는지 애매한 부분이 있는지 좀 조언좀 부탁드려요..

new CountDownTimer(20000, 1000){
 public void onTick(long millisUntilFinished) {
 
 }
 public void onFinish() {
     
  phoneStateListener = new PhoneStateListener(){  
   public void onCallStateChanged(int state, String incomingNumber){
    
    switch(state){
    case TelephonyManager.CALL_STATE_OFFHOOK:  
     break;
        
    case TelephonyManager.CALL_STATE_IDLE:
     TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
     try {
      Class<?> c = Class.forName(tm.getClass().getName());
      Method m = c.getDeclaredMethod("getITelephony");
      m.setAccessible(true);
      ITelephony telephonyService = (ITelephony) m.invoke(tm);
      telephonyService.endCall();
      } 
     catch (Exception e) {
      e.printStackTrace();
      }
          
   
    }
   }
  };
 }   
};

소스를 100% 이해하지 못했구요..

필요한 부분에 대한 소스를 책과 인터넷에서 섞어왔기때문에 문제가 많을 수 있으니 너그러이 봐주세요 ㅠㅠ

 

제가 원하는건 통화중(상대방과연결)됬을경우 아무런 동작을 하지않고
상대방에서 전화거는중(신호중)에 endcall()을 날리게 하고싶었는데,
CALL_STATE_ 로는 할수 가 없는 건가요?
치즈마요 (120 포인트) 님이 2013년 6월 12일 질문
치즈마요님이 2013년 6월 13일 수정

1개의 답변

0 추천
CALL_STATE_IDLE 일때 endCall() 매소드를 날리는게 이해가 좀 안되네요.

질문 정리해서 다시 올리셔야될거 같습니다. 소스와 질문을 보면 뭐가 문제이고 뭐를 하려는 소스인지 잘 모르겠습니다.

일반적으로 실행되어야 할게 실행되지 않는다면 로그나 디버깅 모드를 이용해 원하는 위치로 들어가는지 먼저 확인해보시는게 빠를 것 같습니다.
헐레벌떡 (310 포인트) 님이 2013년 6월 13일 답변
제가 CALL_STATE_IDLE을 통화대기중(신호중)으로 잘못이해한거 같네요 ㅠㅠ
제가 원하는건 통화중(상대방과연결)됬을경우 아무런 동작을 하지않고
상대방에서 전화거는중(신호중)에 endcall()을 날리게 하고싶었는데,
CALL_STATE_ 로는 할수 가 없는 건가요?
전화가 연결 되었다는 상태를 받을 수 없습니다.
2013년 글이라서 댓글이 의미가 없을 수 있으나 혹시 아직도 이부분에서 해매시는 분이 있을까봐 남깁니다.

현재 등록한 리스너에서 넘겨받는 매개변수 중 state정보가 콜 상태정보입니다.

state정보를 이용하여 Ringing(벨소리가 울리는 중) OffHook (통화 중) Idle (통화 종료) 상태를 캐치할 수 있습니다.

Ringing 즉 벨소리가 울리는 시점에서 endCall을 해주시면 전화벨이 울릴때 즉 통화가 시작되기전에 종료할 수 있습니다.

다만 타이밍 이슈가 발생하여 전화벨이 1번 재수없다면 2번정도 울리고 통화가 종료되는 이슈가 발생할 수 있습니다.

OEM에서 제공되는 기능이라면 모를까 서드파트앱에서는 어쩔 수없는 부분입니다.

하지만 작성자님이 작성하신 코드는 제대로된 동작을 할 수 없습니다.

리스너를 등록하는 시점 및 위치가 잘못되었기 때문입니다.

이부분은 더 공부해서 수정하셔야 될 것 같습니다.
...