2017-09-07 34 views
3

키오스크 모드 용 Android 애플리케이션을 작성 중입니다. 이 자습서를 사용하여 키오스크 모드를 만듭니다. http://www.andreas-schrade.de/2015/02/16/android-tutorial-how-to-create-a-kiosk-mode-in-android/Android 키오스크 모드 - 종료 허용

그러나 자습서에서는 사용자가 2 초 후에 집과 응용 프로그램을 계속 클릭 할 수 있습니다.

그래서 집으로 응용 프로그램을 만들어 홈 버튼을 사용하지 않도록 약간 수정했습니다. 나는 이것을 내 매니페스트에 넣음으로써했다 :

<activity android:name=".MainActivity" 
      android:launchMode="singleInstance"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.HOME"/> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

모든 것이 잘 작동한다. 그러나 사용자가 종료하려고하면 (예 : 관리자로 로그인 한 사용자) 내 응용 프로그램이 다시 돌아옵니다. 나는 그것을 가정으로 설정했기 때문에 용의자입니다.

제 질문은 내 앱을 종료하는 방법입니다. 내 앱이 종료되면 실제 집으로 돌아갈 수 있습니까? 그렇지 않다면,이 가정 문제를 해결할 수있는 더 좋은 방법이 있습니까 (예 : 홈 버튼을 비활성화하고 실제로 집으로 설정하지 않음)?

+0

Android에 기기 소유자로 트리거 할 수있는 '실제'키오스크 모드가 있습니다. 이 주제는 정말 큰 주제입니다. https://developer.android.com/work/cosu.html –

답변

4

여러 개의 홈 화면이 설치되어 있습니다 (기기 제조업체 및 앱에서 제공하는 기본 화면). 사용자는 앱을 기본 홈 화면으로 선택해야합니다 (일반적으로 부팅 할 때 발생합니다). 이제 사용자가 "기본"홈 화면 (즉, 제조업체의 앱)을 선택할 수 있도록이 "기본 설정"을 제거하는 것입니다. 이 같은 것을 수행

PackageManager pm = getPackageManager(); 
pm.clearPackagePreferredActivities ("your.package.name"); 

하고 MainActivity 다음 finish()을.


편집 : 당신이 "종료"앱이 방금 대신 기본 홈 화면을 실행하려면 대안 솔루션으로 대체 솔루션

. 앱은 여전히이 경우

PackageManager pm = getPackageManager(); 
Intent homeIntent = new Intent(Intent.ACTION_MAIN); 
homeIntent.addCategory(Intent.CATEGORY_HOME); 
List<ResolveInfo> infoList = pm.queryIntentActivities(homeIntent, PackageManager.MATCH_DEFAULT_ONLY); 
// Scan the list to find the first match that isn't my own app 
for (ResolveInfo info : infoList) { 
    if (!"my.package.name".equals(info.activityInfo.packageName)) { 
     // This is the first match that isn't my package, so copy the 
     // package and class names into to the HOME Intent 
     homeIntent.setClassName(info.activityInfo.packageName, 
         info.activityInfo.name); 
     break; 
    } 
} 
// Launch the default HOME screen 
startActivity(homeIntent); 
finish(); 

이렇게하려면, 당신은 그 중 하나를 기본 홈 화면의 패키지와 클래스 이름을 알고 하드 코딩이 필요하거나 이런 PackageManager을 사용하여 해당 정보를 검색 할 수 있습니다 기본 HOME 화면으로 설정되므로 사용자가 HOME 키를 다시 누르면 응용 프로그램이 시작됩니다. 그러나 사용자는 앱을 "종료"하여 원래의 홈 화면으로 다시 돌아갈 수 있습니다.

+0

이것은 정확히 내가 찾고있는 것입니다! 그러나 1 가지 문제 (쉬운 수정 일 수 있음), 내 애플리케이션을 다음 출시를위한 집으로 다시 설정하는 방법은 무엇입니까? 왜냐하면'pm.clearPackagePreferredActivities'를 할 때 내 앱은 더 이상 홈이 아니며 사용자는 이제 "홈"버튼을 사용할 수 있습니다. 나는 여전히 사용자가 "홈"버튼을 누르지 못하도록해야합니다 (예 : "홈"버튼은 사용자가 그것을 누르면 아무 것도하지 않습니다). – Sam

+0

사용자에게 재부팅을 요청해야한다고 생각합니다. 부팅 할 때 HOME 화면을 선택하라는 메시지가 표시됩니다. –

+0

시도 할 수있는 대체 솔루션을 추가했습니다. 어쩌면 이것이 당신의 요구 사항에 더 잘 어울리는 것일 수도 있습니다. –

1

Android 5.0에 도입 된 기기 소유자 기능을 사용하여 Android 기기를 완벽하게 관리하고 키오스크로 사용할 수 있습니다. 특히 홈 버튼을 탭하여 사용자가 앱을 종료하는 것을 방지 할 수 있습니다.

기기 소유자 키오스크를 설정하는 가장 간단한 방법은 Android Management API을 사용하고 kiosk policy을 구성하는 것입니다.

+0

안녕하세요, 프레드, 문제는 내가 닫을 수 없다는 것입니다. 현재 앱을 종료하거나 종료합니다. 앱을 종료 (또는 종료)하려면 '관리자'를 사용하도록 설정해야합니다. 이 종료 (또는 앱 종료)는 내 앱을 통해 로그인하는 "관리자"에서만 사용할 수 있어야합니다. – Sam

+0

Android Management API를 사용하는 경우 관리자가 앱에 로그인 할 때 키오스크 모드를 사용하지 않도록 정책을 변경하고 앱을 종료하도록 허용 한 다음 정책을 다시 변경하여 관리자가 완료되면 키오스크 모드를 다시 사용하도록 설정할 수 있습니다. – Fred

+0

안녕하세요, 프레드, 제 생각에는 실용적이지 않다고 생각합니다. 기본적으로 우리 앱은 창고에서 사용됩니다.하루가 끝나면 관리자로 일하는 여성은 모든 태블릿을 수집하고 바코드 태그를 사용하여 로그인합니다. 그러면 그녀는 많은 메뉴 버튼을 얻을 것이고 그 중 하나는 "Exit"버튼이 될 것입니다. 나는 성공적으로 정책을 프로그래밍 방식으로 변경하는 방법을 모색 해왔다. 따라서 정책을 프로그래밍 방식으로 변경할 수 없으면 Android Management API를 사용할 수 없습니다. ( – Sam