티스토리 뷰

Android KeyEvent 강제 발생 코드 사용시 아래와 같은 에러가 발생하는 경우 참고할만한 글을 작성합니다.

11-06 00:54:04.324 E AndroidRuntime: java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission 

 

디바이스의 KeyEvent 를 발생시켜서 본인 어플 외에 다른 어플에도 적용 시키려면 INJECT_EVENTS 퍼미션이 필요합니다.

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

 

하지만 안드로이드는 보안과 관리 측면으로 시스템에 중요한 영향을 미치는 API를 사용하기 위해서는
"플랫폼키" 로 Sign을 하여 권한을 받아야 합니다.

"플랫폼키"는 스마트폰 제조사에서 안드로이드 플랫폼을 기기에 올릴 때 생성한 키로서, 
해당 기기 제조사들이 관리하는 고유한 키입니다. 

각 스마트폰 제조사별 기본 어플과 통신사 어플들이 플랫폼키를 이용하여 만들어 진것입니다.
따라서 스마트폰 제조사와 협력관계를 맺고 있어야 이러한 플랫폼 키를 얻을 수 있습니다.

따라서 일반 개발자의 경우에는 단순 테스트 용도로 에뮬레이터에 임의의 플랫폼키 Sign으로 테스트 하거나
루팅된 폰을 이용해서 개발하는 방법이 있습니다.

 

 혹은 본인의 앱 자체에서만 KeyEvent 를 발생하는 방식으로는 사용 가능합니다.

아래와 같이 Manifest 상에 권한을 추가 하고 KeyEvent 를 강제로 발생시키는 코드를 추가해줍니다.

    <uses-permission android:name="android.permission.INJECT_EVENTS"
        tools:ignore="ProtectedPermissions" />
    /* JAVA */
    new Thread(new Runnable() {
        public void run() {
            new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_VOLUME_UP);
        }
    }).start();
    /* Kotlin */
    Thread {
        Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_VOLUME_UP)
    }.start()

 

KetEvent 값은 KeyEvent API 참조 혹은 KeyEvent 관련 값 게시글 참고

 

 

 

'Computer > Android' 카테고리의 다른 글

[Android] 부팅 후 앱 자동 실행  (3) 2020.11.18
[Android] Market App 종류 확인하기  (0) 2020.11.17
[Android] key event value  (0) 2020.11.07
[Kotlin] Basic Syntax (기본 문법)  (0) 2020.11.03
[Android] AccessibilityEvent 구분  (0) 2020.11.03
댓글

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음



Total
Today
Yesterday
최근에 달린 댓글