2012-07-25 3 views
2

나는 지난 1 년 동안 안드로이드 기술을 연구 중이다. 현재 안드로이드 4.0.3에서 애플리케이션 수신 전화 자동 응답을 개발하고 싶지만이 버전에서는 어떤 솔루션도 얻지 못하고 있거나 (ITelephony.aidl)이 API를 찾을 수 없습니다. 제발 제안 해주세요.안드로이드 전화 수신 자동 응답 4.0.3

+0

이 문제가 해결 되었습니까? 후속 조치를 취하십시오. – Guy

답변

0

전화 통화에 응답하거나 거부하려면 MODIFY_PHONE_STATE 권한이 필요합니다. 불행히도 2.3 이후부터는 시스템 앱에서만 사용할 수 있습니다. (더 많은 정보 here)

(원래 here에서) 전화를받을 수있는 해결 방법 :

Intent i = new Intent(Intent.ACTION_MEDIA_BUTTON); 
KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_HEADSETHOOK); 
i.putExtra(Intent.EXTRA_KEY_EVENT, event); 
context.sendOrderedBroadcast(i, null);   
+1

여기에있는 약간의 논리를 설명해 주시겠습니까? Google에 따르면 KEYCODE_HEADSETHOOK이 전화를 끊습니다. 몇 가지 방법을 시도했지만 아무 것도 얻지 못한다. 이벤트를 전달할 수 있지만 KEYCODE_CALL은 adb (adb 쉘 입력 keyevent 5)를 통해 완벽하게 작동한다. 그러나 코드에서이 필요합니다. 어떤 아이디어? – onetwopunch

+0

위 코드 샘플이 효과가 없습니까? 이 스 니펫은 헤드폰 단추가 헤드폰 연결 상태 인 것처럼 시뮬레이션합니다. 일반적으로이 버튼을 클릭하면 통화에 응답하고 통화가 이미 끝나면 통화를 종료합니다. 해결 방법이므로 모든 장치에서 100 % 시간을 사용할 수 없습니다. OEM의 내부 구현에 따라 다릅니다. – Guy

+0

제 질문을 참조하십시오 : http://stackoverflow.com/questions/12805796/how-to-programmatically-answer-a-call-in-android-4-0-3 – onetwopunch

2

그것의 작업 코드입니다. 전화 상태 방송 수신자를 사용하여 수신 전화를 먼저 확인하십시오.

filter.addAction("android.intent.action.PHONE_STATE"); 
    mContext.registerReceiver(myCallReceiver, filter); 

그런 다음 onReceive (컨텍스트 컨텍스트, 의도 의도)에서 answerPhoneHeadsethook() 함수를 호출하십시오.

private void answerPhoneHeadsethook(Context context) { 
    // Simulate a press of the headset button to pick up the call 
    Intent buttonDown = new Intent(Intent.ACTION_MEDIA_BUTTON); 
    buttonDown.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(
      KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK)); 
    context.sendOrderedBroadcast(buttonDown, 
      "android.permission.CALL_PRIVILEGED"); 

    // froyo and beyond trigger on buttonUp instead of buttonDown 
    Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); 
    buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(
      KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); 
    context.sendOrderedBroadcast(buttonUp, 
      "android.permission.CALL_PRIVILEGED"); 
} 
0

이 4.0 안드로이드 2.2에서 작동하고 어떻게 작동하는지 지금은 4.1.2 및 4.2 작동 마지막 줄에 시도 캐치를 추가 한 후 솔직히 그나마 알고 있지만 나를 위해 작동합니다.

Intent headSetUnPluggedintent = new Intent(Intent.ACTION_HEADSET_PLUG); 
    headSetUnPluggedintent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); 
    headSetUnPluggedintent.putExtra("state", 0); 
    headSetUnPluggedintent.putExtra("name", "Headset"); 
    try { 
     sendOrderedBroadcast(headSetUnPluggedintent, null); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

  Log.d(tag, "InSecond Method Ans Call"); 
    // froyo and beyond trigger on buttonUp instead of buttonDown 
    Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); 
    buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(
      KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); 
    sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED"); 

뿐만 아니라 전 4.2 에서 테스트 한 안드로이드 4.1.2에서 나를 위해 노력이 여전히 처리 예외를 제공합니다.

+0

ACTION_HEADSET_PLUG 보안 예외, 권한이 부여되지 않습니다. 비 시스템 응용 프로그램. :( –

+0

참이지만 Manifest에 권한을 입력 할 수는 있지만 작동 중입니다. www.virtualmodelz.com에서 응용 프로그램을 완벽하게 다운로드 할 수 있습니다. – PravinDodia

+0

Android 4.2.2에서 작동하지 않습니다. :(.CALL_PRIVEGED 권한을 추가하려고 시도했습니다. – thomasa88