Sobes.tech
Junior

Ποιοι τύποι αδειών (permissions) υπάρχουν στο Android;

sobes.tech AI

Απάντηση από AI

Στο Android, υπάρχουν διάφοροι τύποι αδειών που καθορίζουν τα επίπεδα πρόσβασης της εφαρμογής σε προστατευμένους πόρους και δεδομένα του χρήστη.

  • Κανονικές άδειες: Άδειες με ελάχιστο κίνδυνο. Παρέχονται αυτόματα κατά την εγκατάσταση της εφαρμογής και δεν απαιτούν ρητή συγκατάθεση του χρήστη κατά τη διάρκεια της λειτουργίας. Για παράδειγμα, πρόσβαση στο διαδίκτυο (android.permission.INTERNET).
  • Επικίνδυνες άδειες: Άδειες υψηλού κινδύνου. Απαιτούν ρητή συγκατάθεση του χρήστη κατά τη διάρκεια της λειτουργίας της εφαρμογής. Η πρόσβαση σε αυτούς τους πόρους μπορεί να επηρεάσει την ιδιωτικότητα ή τη λειτουργία της συσκευής. Για παράδειγμα, πρόσβαση σε επαφές (android.permission.READ_CONTACTS), κάμερα (android.permission.CAMERA).
  • Άδειες υπογραφής: Άδειες που μπορούν να δοθούν σε εφαρμογές που υπογράφονται με το ίδιο πιστοποιητικό με την εφαρμογή που ορίζει την άδεια. Χρησιμοποιούνται για τον έλεγχο πρόσβασης μεταξύ συστατικών ενός συστήματος ή μιας ομάδας εφαρμογών.
  • Άδειες υπογραφής ή συστήματος: Αυτές οι άδειες μπορούν να δοθούν είτε σε εφαρμογές που υπογράφονται με το ίδιο πιστοποιητικό είτε σε εφαρμογές που βρίσκονται στην ενότητα συστήματος.

Επιπλέον, διακρίνονται:

  • Άδειες κατά την εγκατάσταση: Άδειες που ζητούνται και παρέχονται κατά την εγκατάσταση της εφαρμογής. Περιλαμβάνουν κανονικές και υπογραφές άδειες.
  • Άδειες κατά την εκτέλεση: Άδειες που ζητούνται κατά τη διάρκεια της λειτουργίας σε συσκευές με Android 6.0 (επίπεδο API 23) και άνω. Περιλαμβάνουν επικίνδυνες άδειες.
  • Ειδικές άδειες: Μια ειδική κατηγορία αδειών που απαιτούν ειδικά βήματα για την παροχή τους. Για παράδειγμα, υπερκάλυψη πάνω από άλλα παράθυρα (SYSTEM_ALERT_WINDOW) ή αλλαγή ρυθμίσεων συστήματος (WRITE_SETTINGS). Δεν ανήκουν ούτε στις κανονικές ούτε στις επικίνδυνες.

Στο μανιφέστο της εφαρμογής ζητούνται όλες οι απαραίτητες άδειες:

<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>

Η αίτηση επικίνδυνων αδειών πραγματοποιείται κατά τη διάρκεια της λειτουργίας:

// Παράδειγμα αίτησης άδειας για ανάγνωση επαφών
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 {
    // Η άδεια έχει ήδη δοθεί, μπορεί να εκτελεστεί η λειτουργία
}