Wycofanie administratora urządzenia. Niektóre zasady administratora zostały oznaczone jako wycofane po wywołaniu przez administratora urządzenia. Aby dowiedzieć się więcej i poznać opcje migracji, zobacz Wycofanie administratora urządzenia.
Od Androida 2.2 (poziom interfejsu API 8) platforma Androida oferuje funkcje zarządzania urządzeniami na poziomie systemu w ramach interfejsów API do administrowania urządzeniami.
Z tej lekcji dowiesz się, jak utworzyć bezpieczną aplikację, która zarządza dostępem do swoich treści, egzekwując zasady zarządzania urządzeniami. W szczególności aplikację można skonfigurować, tak, by przed wyświetleniem zostało skonfigurowane odpowiednie hasło blokady ekranu dostęp do treści ograniczony do użytkownika.
Zdefiniuj i zadeklaruj zasady
Najpierw należy zdefiniować rodzaje zasad, które mają być obsługiwane na poziomie funkcjonalnego. Zasady mogą określić siłę hasła blokady ekranu, czas wygaśnięcia, szyfrowanie itp.
Wybrany zestaw zasad musi być zadeklarowany w aplikacji,
res/xml/device_admin.xml
. Plik manifestu Androida powinien też odnosić się do
zadeklarowanej zasady.
Każda zadeklarowana zasada odpowiada pewnej liczbie powiązanych metod zasad dotyczących urządzeń w DevicePolicyManager
(zdefiniowaną minimalną długość hasła i minimalną liczbę
wielkie litery to dwa przykłady). Jeśli aplikacja próbuje wywołać metody, których
odpowiednia zasada nie jest zadeklarowana w pliku XML, spowoduje to wywołanie SecurityException
w czasie działania. inne uprawnienia,
takie jak force-lock
, są dostępne, jeśli aplikacja zamierza zarządzać
innych rodzajów zasad. Jak zobaczysz później, w trakcie procesu aktywacji administratora
lista zadeklarowanych zasad zostanie wyświetlona na ekranie systemu.
Ten fragment deklaruje zasady dotyczące limitów haseł w res/xml/device_admin.xml
:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <limit-password /> </uses-policies> </device-admin>
Kod XML deklaracji zasad, do którego odwołuje się plik manifestu Androida:
<receiver android:name=".Policy$PolicyAdmin" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
Tworzenie odbiornika administrowania urządzeniem
Utwórz odbiornik do administrowania urządzeniem, który będzie otrzymywać powiadomienia o zdarzeniach związanych z obsługiwanymi przez Ciebie zasadami. Aplikacja może wybiórczo zastąpić metody wywołania zwrotnego.
W przykładowej aplikacji Administrator urządzenia, gdy administrator urządzenia zostanie zdezaktywowany przez użytkownika, skonfigurowane zasady są usuwane z preferencji wspólnych. Zastanów się, logikę biznesową odpowiednią do Twojego przypadku użycia. Na przykład aplikacja może potrzebować działania mające na celu zminimalizowanie ryzyka związanego z bezpieczeństwem przez wdrożenie kilku kombinacji usuwania danych wrażliwych wyłączając zdalną synchronizację, powiadamiając administratora itp.
Aby odbiornik działał, zarejestruj go w pliku manifestu Androida, jak pokazano we fragmencie kodu powyżej.
Kotlin
class PolicyAdmin : DeviceAdminReceiver() { override fun onDisabled(context: Context, intent: Intent) { // Called when the app is about to be deactivated as a device administrator. // Deletes previously stored password policy. super.onDisabled(context, intent) context.getSharedPreferences(APP_PREF, Activity.MODE_PRIVATE).edit().apply { clear() apply() } } }
Java
public static class PolicyAdmin extends DeviceAdminReceiver { @Override public void onDisabled(Context context, Intent intent) { // Called when the app is about to be deactivated as a device administrator. // Deletes previously stored password policy. super.onDisabled(context, intent); SharedPreferences prefs = context.getSharedPreferences(APP_PREF, Activity.MODE_PRIVATE); prefs.edit().clear().commit(); } }
Aktywowanie administratora urządzenia
Przed wyegzekwowaniem zasad użytkownik musi ręcznie aktywować aplikację jako urządzenie
. Fragment kodu poniżej pokazuje, jak wyzwolić ustawienia, w ramach których
użytkownik może aktywować Twoją aplikację. Warto dodać tekst objaśniający,
użytkownikom, dlaczego aplikacja prosi o przyznanie uprawnień administratora urządzenia, określając
EXTRA_ADD_EXPLANATION
dodatkowy w zamiarze.
Rysunek 1. Wyświetli się ekran aktywacji użytkownika, podaj opis zasad dotyczących urządzeń.
Kotlin
if (!policy.isAdminActive()) { val activateDeviceAdminIntent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN) activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_DEVICE_ADMIN, policy.getPolicyAdmin() ) // It is good practice to include the optional explanation text to // explain to user why the application is requesting to be a device // administrator. The system will display this message on the activation // screen. activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_ADD_EXPLANATION, resources.getString(R.string.device_admin_activation_message) ) startActivityForResult(activateDeviceAdminIntent, REQ_ACTIVATE_DEVICE_ADMIN) }
Java
if (!policy.isAdminActive()) { Intent activateDeviceAdminIntent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_DEVICE_ADMIN, policy.getPolicyAdmin()); // It is good practice to include the optional explanation text to // explain to user why the application is requesting to be a device // administrator. The system will display this message on the activation // screen. activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_ADD_EXPLANATION, getResources().getString(R.string.device_admin_activation_message)); startActivityForResult(activateDeviceAdminIntent, REQ_ACTIVATE_DEVICE_ADMIN); }
Jeśli użytkownik wybierze „Aktywuj”, aplikacja staje się administratorem urządzenia i może rozpocząć proces konfigurowania i egzekwowania zasad.
Aplikacja musi być też przygotowana na obsługę sytuacji, w których użytkownik zrezygnuje.
procesu aktywacji, naciskając przycisk Anuluj, przycisk Wstecz lub klawisz Home. Dlatego
Pole onResume()
w aktywności związanej z konfiguracją zasad musi mieć logikę
aby ponownie ocenić warunek i udostępnić użytkownikowi opcję Aktywacja administratora urządzenia, jeśli
niezbędną.
Wdrażanie kontrolera zasad dotyczących urządzeń
Po udanej aktywacji administratora urządzenia aplikacja skonfiguruje urządzenie. Menedżer zasad z żądaną zasadą. Pamiętaj, że do Androida z każdą wersją. Sprawdzanie wersji aplikacji jest odpowiednie, jeśli używasz przy jednoczesnej obsłudze starszych wersji platformy. Na przykład Hasło Minimum Zasady pisania wielkimi literami są dostępne tylko w interfejsie API na poziomie 11 (Honeycomb) lub wyższym. Następujący kod: pokazuje, jak sprawdzić wersję w czasie działania.
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var policyAdmin: ComponentName dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager policyAdmin = ComponentName(context, PolicyAdmin::class.java) dpm.apply { setPasswordQuality(policyAdmin, PASSWORD_QUALITY_VALUES[passwordQuality]) setPasswordMinimumLength(policyAdmin, passwordLength) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { setPasswordMinimumUpperCase(policyAdmin, passwordMinUpperCase) } }
Java
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName policyAdmin = new ComponentName(context, PolicyAdmin.class); dpm.setPasswordQuality(policyAdmin, PASSWORD_QUALITY_VALUES[passwordQuality]); dpm.setPasswordMinimumLength(policyAdmin, passwordLength); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { dpm.setPasswordMinimumUpperCase(policyAdmin, passwordMinUpperCase); }
W tym momencie zasada może wymuszać stosowanie tej zasady w aplikacji. Aplikacja nie ma dostępu do rzeczywistego używanego hasła blokady ekranu (za pomocą interfejsu Device Policy Manager API) może określić, czy dotychczasowe hasło jest zgodne z wymaganą zasadą. Jeśli okaże się, że hasło blokady ekranu jest niewystarczające. Interfejs API administrowania urządzeniem nie pobiera automatycznie działania naprawcze. Obowiązkiem aplikacji jest jednoznaczne uruchomienie systemu ekran zmiany hasła w aplikacji Ustawienia. Na przykład:
Kotlin
if (!dpm.isActivePasswordSufficient) { // Triggers password change screen in Settings. Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent -> startActivity(intent) } }
Java
if (!dpm.isActivePasswordSufficient()) { ... // Triggers password change screen in Settings. Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD); startActivity(intent); }
Normalnie użytkownik może wybrać jeden z dostępnych mechanizmów blokowania, takich jak Brak, Wzór, Kod PIN (numeryczny) lub Hasło (alfanumeryczny). Jeśli są skonfigurowane zasady dotyczące haseł, typy słabsze od zdefiniowanych w zasadzie są wyłączane. Na przykład, jeśli plik Skonfigurowano jakość hasła „liczbową”. Użytkownik może wybrać kod PIN (liczbowy) lub hasło. (tylko w formacie alfanumerycznym).
Po prawidłowym zabezpieczeniu urządzenia przez ustawienie prawidłowego hasła blokady ekranu aplikacja umożliwia dostęp do zabezpieczonej treści.
Kotlin
when { !dpm.isAdminActive(policyAdmin) -> { // Activates device administrator. ... } !dpm.isActivePasswordSufficient -> { // Launches password set-up screen in Settings. ... } else -> { // Grants access to secure content. ... startActivity(Intent(context, SecureActivity::class.java)) } }
Java
if (!dpm.isAdminActive(..)) { // Activates device administrator. ... } else if (!dpm.isActivePasswordSufficient()) { // Launches password set-up screen in Settings. ... } else { // Grants access to secure content. ... startActivity(new Intent(context, SecureActivity.class)); }