Profile służbowe

Dzięki platformie Android urządzenia mogą mieć praca profile (czasami nazywane profilami zarządzanymi). Kontrolowany jest profil służbowy przez administratora IT, a dostępne dla niego funkcje są ustawiane niezależnie funkcje głównego profilu użytkownika. Takie podejście pozwala organizacjom kontrolować środowisko, w którym na urządzeniu użytkownika działają aplikacje i dane firmowe; a użytkownicy nadal mogą korzystać z osobistych aplikacji i profili.

Z tej lekcji dowiesz się, jak zmodyfikować swoją aplikację, aby działała prawidłowo na urządzeniu z profilem służbowym. Nie musisz nic robić oprócz sprawdzonych metod tworzenia aplikacji. Jednak niektóre z tych najlepszych są szczególnie ważne na urządzeniach z profilami służbowymi. Ten wskazuje problemy, o których należy pamiętać.

Omówienie

Użytkownicy często chcą korzystać z urządzeń osobistych w środowisku firmowym. Ten może stawić czoła dylematowi. Jeśli użytkownik może używać własnych na urządzeniu, organizacja obawia się, że informacje poufne (takie jak informacje o pracowniku e-maile i kontakty) znajdują się na urządzeniu, nad którym organizacja nie ma kontroli.

Aby rozwiązać ten problem, Android 5.0 (poziom interfejsu API 21) umożliwia organizacjom: skonfigurować profile służbowe. Jeśli urządzenie ma profil służbowy, są pod kontrolą administratora IT. Administrator IT może wybrać, które aplikacje są dozwolone dla danego profilu, kontrolować, które funkcje urządzenia mają być dostępne dla profilu.

Profil służbowy na urządzeniu ma wpływ na aplikacje. działające na urządzeniu niezależnie od tego, w którym profilu działa aplikacja:

  • Domyślnie większość intencji nie przechodzi między profilami. Jeśli aplikacja uruchomiona w profilu uruchamia intencję, nie ma modułu obsługi intencji tego profilu i nie można ich łączyć z innym profilem. z powodu ograniczeń profilu żądanie nie uda się, a aplikacja może się wyłączyć nieoczekiwanie.
  • Administrator profilu może ograniczyć dostępność aplikacji systemowych w profil służbowy. To ograniczenie może też spowodować brak modułu obsługi dla typowe intencje w profilu służbowym.
  • Profil osobisty i profil służbowy mają osobne miejsce na dane, identyfikator URI pliku prawidłowy w jednym profilu jest nieprawidłowy w drugim. Dowolne intencja uruchomiona w jednym profilu może być obsługiwana w drugim (w zależności od profilu ), dlatego nie jest bezpieczne dołączanie identyfikatorów URI plików do intencji.

Zapobiegaj nieudanym intencjom

Na urządzeniu z profilem służbowym obowiązują ograniczenia mogą przełączać się między profilami. W większości przypadków wywoływanie intencji jest wyłączony, jest obsługiwany w tym samym profilu, na którym jest uruchamiany. Jeśli nie ma modułu obsługi dla intencji w tym profilu, intencja nie jest obsługiwana, uruchomiony, może się niespodziewanie wyłączyć – nawet jeśli istnieje moduł obsługi do intencji użytkownika.

Administrator profilu może wybrać intencje mogą się przełączać między profilami. Jako administrator IT nie ma możliwości, aby to zrobić. wiedzieć z wyprzedzeniem, które intencje mogą przekroczyć tę granicę. Administrator IT ustawia tę zasadę i w każdej chwili może ją zmienić.

Zanim aplikacja rozpocznie aktywność, sprawdź, czy nie ma odpowiedniej rozdzielczości. Ty może sprawdzić, czy istnieje akceptowalne rozwiązanie problemu, dzwoniąc pod numer Intent.resolveActivity(). W przypadku braku do rozwiązania intencji, metoda zwraca null Jeśli metoda zwraca wartość inną niż null, istnieje co najmniej jeden sposób można zrealizować intencję, i można bez obaw uruchomić intencję. W tym przypadku parametr intencja może być możliwa do rozwiązania albo ponieważ w bieżącym profilu istnieje moduł obsługi lub intencja jest może przejść do modułu obsługi w drugim profilu. (Więcej informacji o w realizacji intencji, przeczytaj artykuł o Common Intents).

Jeśli na przykład aplikacja musi ustawić minutniki, musi to sprawdzić, istnieje prawidłowy moduł obsługi intencji ACTION_SET_TIMER. Jeśli nie można znaleźć aplikacji powinien podjąć odpowiednie działanie (takie jak wyświetlenie błędu) ).

Kotlin

fun startTimer(message: String, seconds: Int) {

    // Build the "set timer" intent
    val timerIntent = Intent(AlarmClock.ACTION_SET_TIMER).apply {
        putExtra(AlarmClock.EXTRA_MESSAGE, message)
        putExtra(AlarmClock.EXTRA_LENGTH, seconds)
        putExtra(AlarmClock.EXTRA_SKIP_UI, true)
    }

    // Check if there's a handler for the intent
    if (timerIntent.resolveActivity(packageManager) == null) {

        // Can't resolve the intent! Fail this operation cleanly
        // (perhaps by showing an error message)

    } else {
        // Intent resolves, it's safe to fire it off
        startActivity(timerIntent)

    }
}

Java

public void startTimer(String message, int seconds) {

    // Build the "set timer" intent
    Intent timerIntent = new Intent(AlarmClock.ACTION_SET_TIMER)
            .putExtra(AlarmClock.EXTRA_MESSAGE, message)
            .putExtra(AlarmClock.EXTRA_LENGTH, seconds)
            .putExtra(AlarmClock.EXTRA_SKIP_UI, true);

    // Check if there's a handler for the intent
    if (timerIntent.resolveActivity(getPackageManager()) == null) {

        // Can't resolve the intent! Fail this operation cleanly
        // (perhaps by showing an error message)

    } else {
        // Intent resolves, it's safe to fire it off
        startActivity(timerIntent);

    }
}

Udostępniaj pliki w różnych profilach

Czasami aplikacja musi przyznać innym aplikacjom dostęp do własnych plików. Na przykład aplikacja galerii obrazów może udostępniać obrazy i redaktorami. Plik można udostępnić zwykle na 2 sposoby: za pomocą pliku URI lub identyfikator URI treści.

Identyfikator URI pliku zaczyna się od prefiksu file:, po którym następuje znak ścieżka bezwzględna do pliku w pamięci urządzenia Ponieważ jednak profilu służbowego i osobistego profilu są przechowywane w oddzielnych obszarach, identyfikator URI pliku , która jest ważna w jednym profilu, jest nieprawidłowa w drugim. Ta sytuacja co oznacza, że jeśli do intencji dołącza identyfikator URI pliku, a intencja jest obsługiwana w drugim profilu. moduł obsługi nie ma dostępu do pliku.

Zamiast tego udostępniaj pliki identyfikatorom URI treści. Identyfikatory URI treści i udostępniać je w bezpieczny sposób. Identyfikator URI treści zawiera ścieżkę pliku, ale też nazwę urzędu, który ją dostarczył, oraz numer identyfikacyjny jego rozpoznanie. Identyfikator treści dla każdego pliku możesz wygenerować za pomocą FileProvider Następnie możesz udostępnić te treści identyfikator w innych aplikacjach (nawet w innym profilu). Odbiorca może użyć funkcji Content ID, aby uzyskać dostęp do pliku.

Oto jak można na przykład uzyskać identyfikator URI treści konkretnego pliku Identyfikator URI:

Kotlin

// Open File object from its file URI
val fileToShare = File(fileUriToShare)

val contentUriToShare: Uri = FileProvider.getUriForFile(
        context,
        "com.example.myapp.fileprovider",
        fileToShare
)

Java

// Open File object from its file URI
File fileToShare = new File(fileUriToShare);

Uri contentUriToShare = FileProvider.getUriForFile(getContext(),
        "com.example.myapp.fileprovider", fileToShare);

Gdy wywołujesz metodę getUriForFile(), należy podać upoważnienie dostawcy plików (w tym przykładzie "com.example.myapp.fileprovider"), która jest określona w <provider>. manifestu aplikacji. Więcej informacji o udostępnianiu plików za pomocą identyfikatorów URI treści znajdziesz tutaj: Udostępnianie Pliki.

Nasłuchuj powiadomień

Aplikacja zwykle udostępnia Podklasa NotificationListenerService na aby otrzymywać z systemu wywołania zwrotne dotyczące zmian powiadomień. Urządzenia z profile służbowe mogą wpływać na działanie aplikacji NotificationListenerService z Twoją aplikacją.

W profilu służbowym

Nie można użyć uprawnienia NotificationListenerService w aplikacji uruchomione w profilu służbowym. Gdy aplikacja działa w profilu służbowym, system ignoruje NotificationListenerService Twojej aplikacji. Pamiętaj jednak: aplikacje uruchomione w profilu osobistym mogą nasłuchiwać powiadomień.

W profilu osobistym

Gdy aplikacja działa w profilu osobistym, możesz nie otrzymywać powiadomień dla aplikacji działających w profilu służbowym. Domyślnie wszystkie aplikacje profilu osobistego otrzymuje wywołania zwrotne, ale administrator IT może dodać jeden lub więcej profili osobistych do listy dozwolonych aplikacje, które pozwalają nasłuchiwać zmian powiadomień. Następnie system blokuje aplikacji spoza listy dozwolonych. W Androidzie 8.0 (poziom interfejsu API 26) lub nowszym zasady dotyczące urządzeń kontroler (DPC) zarządzający profilem służbowym może blokować słuchanie przez aplikację na powiadomienia z profilu służbowego za pomocą DevicePolicyManager metoda setPermittedCrossProfileNotificationListeners() Aplikacja nadal będzie otrzymywać wywołania zwrotne dotyczące powiadomień opublikowanych na profilu osobistym profil.

Testowanie aplikacji pod kątem zgodności z profilami służbowymi

Aplikację należy przetestować w środowisku profilu służbowego, aby: wykrywaj problemy, które mogą powodować awarię aplikacji na urządzeniu profili służbowych. Testowanie na urządzeniu z profilem służbowym jest przydatne by mieć pewność, że aplikacja prawidłowo obsługuje intencje: nie uruchamia intencji, nie można obsługiwać, nie dołączają identyfikatorów URI, które nie działają z wieloma profilami, itd. włącz.

Udostępniliśmy przykładową aplikację TestDPC. który pozwala skonfigurować profil służbowy na urządzeniu z Androidem. Android 5.0 (poziom interfejsu API 21) lub nowszy. Dzięki tej aplikacji możesz w prosty sposób testować w środowisku profilu służbowego. Możesz jej też używać do: skonfiguruj profil służbowy w ten sposób:

  • Określ, które aplikacje domyślne mają być dostępne na profil
  • Skonfiguruj intencje, które mogą się przełączać między profilem drugi

Jeśli ręcznie zainstalujesz aplikację za pomocą kabla USB na urządzeniu z profilu służbowego, aplikacja jest zainstalowana zarówno na koncie osobistym, jak i służbowym profil. Po zainstalowaniu aplikacji możesz ją przetestować w następujące warunki:

  • Jeśli intencja jest zwykle obsługiwana przez aplikację domyślną (na przykład aplikację aparatu), wyłącz ją w profilu służbowym, by sprawdzić, czy aplikacja prawidłowo je obsługuje.
  • Jeśli uruchomisz intencję, która oczekuje, że będzie obsługiwana przez inną aplikację, wypróbuj włączenie i wyłączenie uprawnień tej intencji do przejścia z jednego profilu innego użytkownika. Sprawdź, czy aplikacja działa prawidłowo w obu sytuacjach. Jeśli nie można łączyć się między profilami, sprawdź działanie aplikacji zarówno gdy w profilu aplikacji dostępny jest odpowiedni moduł obsługi, a gdy go nie ma. Jeśli na przykład aplikacja wywołuje intencję związaną z mapą, wypróbuj każde z tych rozwiązań scenariusze:
    • urządzenie umożliwia intencje przejścia między profilami. w drugim profilu znajduje się odpowiedni moduł obsługi (profil, na którym aplikacja działa)
    • Urządzenie nie zezwala intencjom mapowania na przechodzenie między profilami, ale to odpowiedni moduł obsługi w profilu aplikacji
    • Urządzenie nie zezwala intencjom mapowania na przechodzenie między profilami, nie jest odpowiednim modułem obsługi do intencji związanych z mapą w profilu urządzenia
  • Jeśli dołączasz treść do intencji, sprawdź, czy intencja działa prawidłowo zarówno wtedy, gdy jest obsługiwana w profilu aplikacji, jak i gdy łączy się profili.

Testowanie na profilach służbowych: porady i wskazówki

Podczas testowania na stronie urządzenie z profilem służbowym.

  • Jak wspomnieliśmy, po zainstalowaniu aplikacji z innego urządzenia na urządzeniu z profilem służbowym zainstalowanego w obu profilach. Jeśli chcesz, możesz usunąć aplikację z jednego profilu. a potem zostaw na drugim.
  • Większość poleceń menedżera aktywności dostępnych w powłoce Android Debug Bridge (adb) obsługują flagę --user, która pozwala wskazać użytkownika, który ma zostać uruchomiony . Określając użytkownika, możesz określić, czy aplikacja ma być uruchamiana jako niezarządzany użytkownik główny lub profilu służbowego. Więcej informacji znajdziesz tutaj: ADB poleceń powłoki.
  • Aby znaleźć aktywnych użytkowników na urządzeniu, użyj polecenia menedżera pakietów adb list users. Pierwsza liczba w ciągu wyjściowym to identyfikatora użytkownika, którego można używać z flagą --user. Więcej więcej informacji można znaleźć w artykule ADB Shell (powłoka ADB). Polecenia.

Aby na przykład znaleźć użytkowników na urządzeniu, uruchom to polecenie:

$ adb shell pm list users
UserInfo{0:Drew:13} running
UserInfo{10:Work profile:30} running

W tym przypadku użytkownik główny („Drew”) ma identyfikator użytkownika 0, a parametr profil służbowy ma identyfikator użytkownika 10. Aby uruchomić aplikację w profilu służbowym, użyj takiego polecenia:

$ adb shell am start --user 10 \
-n "com.example.myapp/com.example.myapp.testactivity" \
-a android.intent.action.MAIN -c android.intent.category.LAUNCHER