[android] Android에서 홈 및 기타 시스템 버튼을 비활성화하는 방법은 무엇입니까?

Android 애플리케이션에서 홈 및 기타 시스템 버튼을 비활성화해야합니다.

예 : MX Player ( Google Play 참조 )-플레이어 화면에서 “잠금”아이콘을 누르면 모든 하드웨어 및 소프트웨어 시스템 버튼이 잠 깁니다.

루팅없이 잘 작동합니다.

Android 버전이 다른 일부 기기에서 테스트했습니다. Kids Lock (플러그인)을 분해하려고했지만 아직 작동 방식에 대한 단서가 없습니다.

다음을 위해 Kids Lock (플러그인)과 같은 솔루션이 필요합니다 MX Player.-홈, 뒤로 및 기타 모든 시스템 버튼을 비활성화합니다.

어떤 제안?



답변

먼저, Home그 문제에 대해 버튼이나 다른 버튼을 정말로 비활성화하고 싶다면 길고 열심히 생각하십시오 (예 :Back 버튼) . 이것은해야 할 일이 아닙니다 (적어도 대부분의 경우 이것은 나쁜 디자인입니다. ). 나는 나만을 위해 말할 수 있지만 OS 버튼을 클릭하는 것과 같은 작업을 수행 할 수없는 앱을 다운로드 한 경우 다음으로 해당 앱을 제거하고 매우 나쁜 리뷰를 남깁니다. 또한 귀하의 앱이 App Store에 표시되지 않을 것이라고 생각합니다.

지금…

MX Player다른 응용 프로그램 위에 그릴 수있는 권한을 요청 하는 것 입니다 . 장치 MX 플레이어 권한

Home버튼을 재정의 할 수 없기 때문입니다 Android(최소한 최신 OS 버전에서는 없음). MX Player앱을 “잠그고” Home버튼을 클릭하면 런처 위에 표시됩니다.

좀 더 간단하고 이해하기 쉬운 예를 보려면 Facebook Messenger 앱을 참조하십시오 .

MX 플레이어 Status BarNavigation Bar“재정의” 에 대한 추가 정보를 제공하라는 요청을 받았기 때문에 이러한 주제도 포함하도록 답변을 편집하고 있습니다.

먼저 MX Player는 .NET에서 몰입 형 전체 화면 모드 ( DevBytes Video )를 사용하고 KitKat있습니다.
Android 4.4 (API 레벨 19)는 앱이 진정한 “전체 화면”이되도록하는 setSystemUiVisibility ()에 대한 새로운 SYSTEM_UI_FLAG_IMMERSIVE 플래그를 도입합니다 . 이 플래그를 SYSTEM_UI_FLAG_HIDE_NAVIGATIONSYSTEM_UI_FLAG_FULLSCREEN 플래그 와 결합 하면 탐색 및 상태 표시 줄을 숨기고 앱이 화면의 모든 터치 이벤트를 캡처 할 수 있습니다.

몰입 형 전체 화면 모드가 활성화되면 활동은 모든 터치 이벤트를 계속 수신합니다. 사용자는 시스템 표시 줄이 일반적으로 나타나는 영역을 따라 안쪽으로 스 와이프하여 시스템 표시 줄을 표시 할 수 있습니다. 이렇게하면 SYSTEM_UI_FLAG_HIDE_NAVIGATION 플래그 (및 적용된 경우 SYSTEM_UI_FLAG_FULLSCREEN 플래그) 가 지워져 시스템 표시 줄이 표시됩니다. 이것은 또한 설정된 경우 View.OnSystemUiVisibilityChangeListener를 트리거합니다 . 그러나 잠시 후 시스템 표시 줄을 자동으로 다시 숨기려면 대신 SYSTEM_UI_FLAG_IMMERSIVE_STICKY 플래그 를 사용할 수 있습니다 . 이 모드에서 일시적으로 표시되는 시스템 표시 줄은 일시적인 상태이므로 플래그의 “고정”버전은 리스너를 트리거하지 않습니다.

둘째 : 상태 바 숨기기
: 제 탐색 표시 줄 숨기기
하시기 바랍니다 메모를 그 몰입 전체 화면을 사용하는 경우에만 있지만 KitKat을 숨기고, Status Bar그리고 Navigation Bar뿐만 아니라입니다 KitKat.

2 일과 3 일에 대해 할 말이 많지 않습니다. 당신은 내가 믿는 아이디어를 얻었습니다. 어쨌든 그것은 빠른 읽기입니다. View.OnSystemUiVisibilityChangeListener에 세심한주의를 기울이 십시오 .

내가 의미하는 바를 설명하는 요점을 추가했습니다. 완전하지 않고 수정이 필요하지만 아이디어를 얻을 수 있습니다. https://gist.github.com/Epsiloni/8303531

이것을 구현하는 행운을 빕니다.


답변

나는 shaobin0604의 대답을 따랐고 마침내 다음을 추가하여 HOME 버튼을 잠글 수있었습니다.

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

AndroidManifest.xml당신이해야 할 모든 복사하는 것입니다 HomeKeyLocker.java에서 shaobin의 lib 디렉토리 프로젝트와처럼 그것을 구현 shaobin의 예 . BTW : 내 AVD의 Android 버전은 Android 4.0.3 입니다.


답변

Android-HomeKey-Locker 를 사용하여 HOME KEY 및 기타 시스템 키 (예 : BACK KEY 및 MENU KEY)를 비활성화 할 수 있습니다.

이것이 귀하의 신청서에 도움이되기를 바랍니다. 감사.


답변

여기에 언급 된 화면 고정 기능을 사용하여 홈 및 최근 버튼 Android 5.0을 비활성화 할 수 있습니다 .

Android 5.0에는 사용자가 작업을 떠나거나 알림으로 인해 중단되는 것을 일시적으로 제한 할 수있는 새로운 화면 고정 API가 도입되었습니다. 예를 들어 Android 또는 단일 목적 또는 키오스크 애플리케이션에서 높은 위험 평가 요구 사항을 지원하기 위해 교육 앱을 개발하는 경우에 사용할 수 있습니다. 앱이 화면 고정을 활성화하면 사용자는 앱이 모드를 종료 할 때까지 알림을 보거나 다른 앱에 액세스하거나 홈 화면으로 돌아갈 수 없습니다.

기기를 키오스크로 잠글 수 있습니다. 탐색 모음은 숨겨지지 않지만 홈 및 최근 버튼은 모드 활성화 방법에 따라 제거하거나 비활성화 할 수 있습니다. 여기 에서이 기능을 테스트 한 후 몇 가지 정보를 썼습니다 .


답변

추측 일 뿐이지 만 SYSTEM_ALERT_WINDOW 권한 ( “다른 앱 위에 그리기”로 표시됨, 여기 참조 )을 사용하면 가능할 수 있습니다. 앱을 전체 화면, 시스템 경고 유형 창으로 표시합니다. 이렇게하면 홈 화면을 포함한 다른 모든 앱이 숨겨 지므로 홈을 눌러도 눈에 보이는 효과없이 실제로 비활성화 되지 않습니다 .

MX Player에는이 권한이 선언되어 있으며 Facebook Messenger에는 ” 채팅 헤드 ” 를 표시하는데도 권한이 있으므로 해결책이 될 수 있습니다.

업데이트 (내 의견에서 추가됨) : 다음으로 터치 이벤트 캡처 / OnSystemUiVisibilityChangeListener 사용과 함께 SYSTEM_UI_FLAG_HIDE_NAVIGATION을 사용하여 기본 동작 (터치시 나타나는 탐색 모음)을 재정의합니다. 또한 몰입 형 종료 제스처가 작동하지 않는다고 말 했으므로 SYSTEM_UI_FLAG_IMMERSIVE_STICKY도 설정해 볼 수 있습니다 (SYSTEM_UI_FLAG_FULLSCREEN 및 SYSTEM_UI_FLAG_HIDE_NAVIGATION 사용).


답변

이전에는 홈 버튼을 비활성화 할 수 있었지만 지금은 그렇지 않습니다. 사용자를 가두는 악성 소프트웨어 때문입니다.

자세한 내용은 여기에서 확인할 수 있습니다. Android 4.0 이상에서 홈 버튼 비활성화

마지막으로이 다른 질문에서 볼 수 있듯이 뒤로 버튼을 비활성화 할 수 있습니다. 안드로이드에서 뒤로 버튼 비활성화


답변

Android 5.0 이상을 타겟팅하는 경우. 다음을 사용할 수 있습니다.

Activity.startLockTask()