Android 자동 응답

오늘은 연후 첫 출근, 한가함, 새해 새로운 기상, 그래서 2년 동안 일한 풋내기로서 드디어 자신의 첫 기술 블로그를 쓰기 시작했습니다. Fighting~
앞에서 프로젝트를 하면서 겪었던 작은 문제 중 하나를 요약해 봅시다. 전화를 받습니다.
제품의 수요는 버튼을 클릭하여 사용자의 전화를 받는 기능을 실현해야 하지만 인터넷에서 찾은 방법을 시험적으로 사용한 후에도 실현할 수 없다. 마지막으로 이미 이 기능을 실현한 apk를 역컴파일한 후에 관건적인 코드를 찾았다.당시에도 처음으로 남의 집 코드를 역컴파일하여 현재 배우고 현재 사용하며 상상 속의 복잡함이 없었다.다음은 간단한 과정을 묘사해서 기록해 봅시다.
인터넷상에서 많은 실현 방법을 찾았는데, Itelephony를 통해.aidl 반사 호출 시스템 인터페이스가 기본적으로 통하지 않습니다. 안드로이드 2.3 이하는 가능할 수도 있지만 버전이 너무 낮아서 검증되지 않았습니다.다른 실현 방식은 모두 아날로그 이어폰 버튼이나 오디오 재생 버튼을 통해 이루어진다.
다음 방식은 검증된 후에도 통하지 않습니다. 4.1 이상 시스템이 권한을 제한했습니다. 일부 기종은 경고: Permission Denial: not allowed to send broadcast android.intent.action.HEADSET_PLUG, 브로드캐스트를 보낼 때 권한이 추가되더라도 (이 브로드캐스트를 받을 때 권한을 추가해야 함)
        perm = “android.permission.CALL_PRIVLEGED” 

그러나 4.1 이상 버전에서는 이 권한은 시스템에서만 적용할 수 있는 것으로 보이며 오류가 발생할 수 있다.여전히 전화 연결을 실현할 수 없다
        Intent meidaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
        KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK);
        meidaButtonIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
        AppApplication.getApplication().sendOrderedBroadcast(meidaButtonIntent, perm);

마지막 실현 방식은 역컴파일을 통해 찾은 방법으로 핸드폰을 테스트하면 모두 수신을 실현할 수 있다. 그러나 기능이 출시된 후 일부 사용자의 피드백을 받지 못하는 것은 기종 문제이기 때문에 검증을 해야 한다.그러나 아래의 방법은 현재 검증 후 기본적으로 문제가 없는 방법이므로 기록을 공유하여
try {
            if (android.os.Build.VERSION.SDK_INT >= 19) {
                AudioManager am = (AudioManager) AppApplication.getContext().getSystemService(Context.AUDIO_SERVICE);

                long eventtime = SystemClock.uptimeMillis() - 1;

                KeyEvent var6 = new KeyEvent(/*eventtime, 1L + eventtime, */0, 79/*, 0, 0, 0, 0, 128*/);
                KeyEvent var7 = new KeyEvent(1, 79);
                am.dispatchMediaKeyEvent(var6);
                am.dispatchMediaKeyEvent(var7);
            } else {
                Runtime.getRuntime().exec("input keyevent " + Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK));
            }


        }

79. 사실 Key Event.KEYCODE_HEADSETHOOK, 1 은 Key Event.ACTION_UP, 0이 Key Event입니다.ACTION_DOWN
설명이 필요합니다. 이것은 많은 기기에서 음악 재생을 실현할 수 있지만 여전히 전화를 받을 수 없고, 단지 예비용으로만 사용됩니다
       Runtime.getRuntime().exec("input keyevent " + Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK));

좋은 웹페이지 즐겨찾기