2017-09-07 382 views
3

我正在爲Kiosk模式編寫Android應用程序。我正在使用本教程來創建信息亭模式:http://www.andreas-schrade.de/2015/02/16/android-tutorial-how-to-create-a-kiosk-mode-in-android/Android Kiosk模式 - 允許退出

但是,在本教程中,用戶仍然可以在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> 

一切正常。但是,當用戶嘗試退出(即用戶以管理員身份登錄)時,我的應用程序又回來了。我懷疑是因爲我把它設置爲HOME。

我的問題是,如何讓我的應用程序退出。當我的應用程序退出時是否有可能返回實際的家庭?如果沒有,是否有更好的方法來解決這個家庭問題(即禁用home按鈕而不是實際設置爲home)?

+0

Android中有一個「真實」Kiosk模式,您可以作爲設備所有者觸發。這是一個非常大的話題,如果你對此感興趣,你可以閱讀更多關於它的信息:https://developer.android.com/work/cosu.html –

回答

4

您安裝了多個HOME屏幕(由設備製造商和您的應用程序提供的默認屏幕)。用戶必須選擇你的應用程序應該是默認的主屏幕(這通常發生在啓動時)。你現在想要做的是刪除這個「首選」設置,以便用戶可以選擇不同的「默認」主屏幕(即:製造商的應用程序)。是這樣做的:

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

,然後finish()MainActivity


編輯:替代解決方案

作爲替代方案,當你想「退出」您的應用程序,你只需啓動默認主屏代替。要做到這一點,你需要或者知道默認主屏的包和類名和硬編碼,也可以掃描使用PackageManager像這樣的信息:

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(); 

在這種情況下,你的應用程序仍然是設置爲默認的主屏幕,所以如果用戶再次按下HOME鍵,您的應用程序將啓動。但用戶可以「退出」您的應用程序,再次返回到原​​始主屏幕。

+0

這正是我正在尋找的!但是1個問題(可能是一個簡單的解決方法),如何將我的應用程序設置爲下次啓動的家?因爲當我執行'pm.clearPackagePreferredActivities'時,我的應用程序不再是主頁,用戶現在可以使用「主頁」按鈕。我仍然需要防止用戶點擊「主頁」按鈕(即當用戶按下「Home」按鈕時什麼也不做) – Sam

+0

我想你需要告訴用戶重新啓動。在啓動時,應該要求用戶選擇HOME屏幕。 –

+0

我已經添加了一個可以嘗試的替代解決方案。也許這是一個更符合你的要求。 –

1

您可以使用Android 5.0中引入的設備所有者功能來全面管理Android設備並將其用作信息亭。除此之外,這允許您通過點擊主頁按鈕來阻止用戶退出應用程序。

設置設備所有者信息亭的最簡單方法是使用Android Management API並配置kiosk policy

+0

嗨弗雷德,我遇到的問題是我無法關閉關閉或退出當前應用程序。我需要啓用「管理員」關閉(或退出)從應用程序。此關機(或退出應用程序)只能用於「管理員」,他們將通過我的應用程序登錄。 – Sam

+0

如果您使用Android Management API,則可以在管理員登錄您的應用時允許退出應用,然後再次更改策略以在管理員完成後重新啓用Kiosk模式,從而更改策略以禁用Kiosk模式。 – Fred

+0

嗨弗雷德,我認爲這不適合我的情況。所以,基本上我們的應用程序在倉庫中使用。在一天結束時,在管理員工作的女士將收集所有平板電腦並使用她的條形碼標籤進行登錄。然後,她會得到一堆菜單按鈕,其中一個是「退出」按鈕。我一直在尋找如何以編程方式更改策略而沒有成功。因此,除非以編程方式更改策略,否則我無法使用Android Management API :( – Sam