Role w Androidzie

Jest to cykl artykułów poświęcony Androidowi Q. Wszystkie artykuły znajdziesz na tej stronie.

W każdym systemie operacyjnym znajdują się programy, które odpowiadają za konkretną rzecz. Oprócz tego ustawione są aplikacje domyślne, które odpowiadają za otwieranie konkretnych formatów pliku. I tak na przykład Microsoft Word odpowiada za otwieranie plików docx. Android Studio odpowiada za tworzenie aplikacji na system Android. Również w Androidzie znajdziemy aplikacje domyślne.

Uzupełnij wiedzę o: Weryfikacja SMS w aplikacji Android

Role w Androidzie

Android Q wprowadza nową funkcję, która umożliwia systemowi operacyjnemu przyznanie aplikacjom odpowiedniego dostępu do funkcji systemu na podstawie określonej kategorii (roli). Każda rola reprezentuje typowy przypadek użycia, takie jak przeglądanie zdjęć w galerii, przeglądanie stron internetowych lub wysyłanie wiadomości SMS. Jeśli aplikacja utraci swoją rolę, uprawnienia zostaną również utracone.

Rola to unikalna nazwa w systemie powiązana z niektórymi uprawnieniami. Lista dostępnych ról może ulec zmianie. Dlatego każda aplikacja powinna sprawdzać, czy rola jest dostępna i czy można ją przyznać.

Może być wiele aplikacji kwalifikujących się do roli, ale tylko nieliczni dostaną odpowiednią plakietkę. Aby zakwalifikować się do roli, aplikacja musi spełniać określone wymagania. Następnie będzie potrzebować zgody użytkownika, aby stać się posiadaczem ról. Na przykład aplikacje z rolą „SMS” będą automatycznie miały dostęp do kontaktów, czytania i wysyłania SMS-ów, kamery, mikrofony, pamięci i historii połączeń.

Role w Androidzie Uprawnienia

Jak działają role w praktyce?

Ról niestety nie ma dużo. Możesz je sprawdzić w dokumentacji, jakie są dostępne. Również nie ma dużo kodu do napisania oraz dość prosto wdrożyć role w Androidzie. W poniższym przykładzie zrobimy rolę dla przeglądarki internetowej, która nie wymaga uprawnień.

Krok 1

W pierwszym kroku musisz dodać wszelkie niezbędne kategorie, filtry IntentFiltr oraz uprawnienia do manifestu aplikacji. Jeżeli nie wiesz jakie filtry dodać do aktywności, serwisu itp. sprawdź to na tej stronie.

<uses-permission android:name="android.permission.INTERNET"/>
...
<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />

        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="http" />
    </intent-filter>
</activity>

Krok 2

Następnie musisz sprawdzić, czy rola jest dostępny w bieżącym systemie. Możemy to sprawdzić za pośrednictwem klasy RoleManager:

if (roleManager.isRoleAvailable(RoleManager.ROLE_BROWSER)){
    ...
}

Krok 3

Jeśli rola jest dostępne, to sprawdzamy, czy nasza aplikacja pełni obecnie tę funkcję.

if (roleManager.isRoleHeld(RoleManager.ROLE_BROWSER))
    Log.d(TAG,"App is already role holder")
else{
    Log.d(TAG,"App is qualified to be a role holder")
}

Krok 4

Jeśli Twoja aplikacja nie posiada roli, musisz poprosić użytkownika o dostęp do niej. Używamy do tego celu odpowiedniego Intenta z klasy RoleManager

// Ask user to grant role
val intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_BROWSER)
startActivityForResult(intent, ROLE_REQUEST_CODE)

Krok 5

Teraz sprawdźmy, czy użytkownik nadał odpowiednią rolę.

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == ROLE_REQUEST_CODE) {
        if (resultCode == RESULT_OK)
           Log.d(TAG,"Granted!")
        else
           Log.d(TAG,"Not granted!")
    }
}

i to wszystko 🙂

Ustaw role w Androidzie

Aż tak różowo to nie jest…

Android 10 ma wiele poprawek związanych z prywatnością, a role są krokiem w tym kierunku. Niestety Google się rozpędziło i tak na przykład aplikacja do SMS-ów dostanie według mnie za dużo uprawnień. Nie każda aplikacja potrzebuje dostępu do kamery lub mikrofonu. A jeśli już jest takie zapotrzebowanie, użytkownik może wyrazić na to zgodę w osobnym komunikacie. Patrząc z punktu programisty, fajnie jest dostać dodatkowe funkcje systemowe. Aby na pewno?

Jeśli Twoja aplikacja otrzyma uprawnienia i posiada odpowiednią rolę, a mimo to użytkownik zmieni choć jedną wartość dostepu to nadal musisz skorzystać z PackageManager. Dlaczego? Ponieważ role masz, ale RoleManager nie sprawdza, czy masz wszystkie zgody na TAK. Oprócz tego tracąc rolę w androidzie, tracisz wszystkie uprawnienia.

Google tez wycofało kilka ról, które były dostępne w początkowej wersji Androida Q. Między innymi rolę do muzyki i galerii.

W jakim celu wujek Google stworzył Role i jak mają pomóc programistom, skoro nadal będziesz korzystał ze starych metod do sprawdzania uprawnień. Osobiście mnie nie przekonują role, a Ciebie?