Sobes.tech
Junior

Jakie rodzaje uprawnień (permissions) istnieją w Androidzie?

sobes.tech AI

Odpowiedź od AI

Na Androidzie istnieje kilka rodzajów uprawnień, które określają poziomy dostępu aplikacji do chronionych zasobów i danych użytkownika.

  • Uprawnienia normalne: Uprawnienia o minimalnym ryzyku. Są one automatycznie przyznawane podczas instalacji aplikacji i nie wymagają wyraźnej zgody użytkownika podczas działania. Na przykład dostęp do internetu (android.permission.INTERNET).
  • Uprawnienia niebezpieczne: Uprawnienia o wysokim ryzyku. Wymagają wyraźnej zgody użytkownika podczas działania aplikacji. Dostęp do tych zasobów może wpłynąć na prywatność lub funkcjonowanie urządzenia. Na przykład dostęp do kontaktów (android.permission.READ_CONTACTS), kamery (android.permission.CAMERA).
  • Uprawnienia podpisu: Uprawnienia, które mogą być przyznane aplikacjom podpisanym tym samym certyfikatem, co aplikacja definiująca uprawnienie. Używane do kontroli dostępu między komponentami tego samego systemu lub zestawu aplikacji.
  • Uprawnienia podpisu lub systemowe: Te uprawnienia mogą być przyznane zarówno aplikacjom podpisanym tym samym certyfikatem, jak i tym znajdującym się w sekcji systemowej.

Ponadto można wyróżnić:

  • Uprawnienia podczas instalacji: Uprawnienia, które są żądane i przyznawane podczas instalacji aplikacji. Należą do nich normalne i podpisane uprawnienia.
  • Uprawnienia w czasie działania: Uprawnienia żądane podczas działania na urządzeniach z Androidem 6.0 (API poziom 23) i wyżej. Należą do nich niebezpieczne uprawnienia.
  • Uprawnienia specjalne: Specjalna klasa uprawnień, które wymagają specjalnych kroków do ich przyznania. Na przykład nakładanie na inne okna (SYSTEM_ALERT_WINDOW) lub zmiana ustawień systemowych (WRITE_SETTINGS). Nie należą ani do normalnych, ani do niebezpiecznych.

W manifeście aplikacji żąda się wszystkich niezbędnych uprawnień:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.CAMERA" />

    <application
        ...
        >
        ...
    </application>
</manifest>

Żądanie niebezpiecznych uprawnień odbywa się w czasie działania:

// Przykład żądania uprawnienia do odczytu kontaktów
if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.READ_CONTACTS)
    != PackageManager.PERMISSION_GRANTED) {

    ActivityCompat.requestPermissions(this,
        arrayOf(Manifest.permission.READ_CONTACTS),
        MY_PERMISSIONS_REQUEST_READ_CONTACTS)

} else {
    // Uprawnienie już przyznane, można wykonać operację
}