티스토리 뷰
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 |
댓글