Normal Permission στο Android — τι είναι, επίπεδα προστασίας και αρχή λειτουργίας

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-05-20 Χρόνος ανάγνωσης: 8 λεπ

Normal Permission — μια κατηγορία δικαιωμάτων στο Android που το σύστημα χορηγεί αυτόματα χωρίς να ρωτά τον χρήστη. Σύμφωνα με το Android Developer Documentation, 2024, τα κανονικά δικαιώματα έχουν ProtectionLevel normal και δεν απαιτούν runtime διάλογο, σε αντίθεση με τα επικίνδυνα. Καλύπτουν πρόσβαση στο διαδίκτυο, κατάσταση δικτύου και δόνηση, χωρίς να δημιουργούν κίνδυνο για τα εμπιστευτικά δεδομένα του χρήστη.

Κύρια σημεία

  • Normal Permission — κατηγορία δικαιωμάτων Android με ProtectionLevel normal, που χορηγούνται αυτόματα κατά την εγκατάσταση.
  • Για χρήση αρκεί η προσθήκη uses-permission στο manifest — δεν εμφανίζεται διάλογος στον χρήστη.
  • Κύρια διαφορά από τα επικίνδυνα — απουσία runtime αιτήματος και αδυναμία ανάκλησης μέσω ρυθμίσεων.
  • Η λίστα περιλαμβάνει INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE και άλλες σταθερές συστήματος.
  • Το επίπεδο προστασίας μπορεί να ελεγχθεί μέσω PackageManager.getPermissionInfo στον κώδικα της εφαρμογής.

Τι είναι το Normal Permission στο Android

Normal Permission — ένας τύπος δικαιωμάτων συστήματος Android με ProtectionLevel normal, που χορηγείται αυτόματα στην εφαρμογή τη στιγμή της εγκατάστασης. Ο προγραμματιστής δεν χρειάζεται να γράψει κώδικα για αίτημα — αρκεί να αναφέρει το δικαίωμα στο AndroidManifest.xml. Ο χρήστης δεν βλέπει διαλόγους και δεν μπορεί να ανακαλέσει το normal permission ξεχωριστά, μόνο διαγράφοντας ολόκληρη την εφαρμογή.

Το σύστημα Android ταξινομεί τα κανονικά δικαιώματα ως χαμηλού κινδύνου — δεν παρέχουν πρόσβαση σε προσωπικά δεδομένα, κάμερα ή μικρόφωνο. Τυπικά παραδείγματα: πρόσβαση στο διαδίκτυο, διαχείριση δόνησης, ανάγνωση κατάστασης Wi-Fi. Σύμφωνα με το Android Security Model (2024), περίπου το 40 τοις εκατό όλων των δικαιωμάτων συστήματος ανήκουν στην κατηγορία normal.

Σημαντική ιδιότητα — τα κανονικά δικαιώματα δεν ανακαλούνται κατά τον χρόνο εκτέλεσης μέσω Settings. Εάν ο χρήστης θέλει να απαγορεύσει την πρόσβαση, ο μόνος τρόπος είναι να διαγράψει την εφαρμογή. Οι προγραμματιστές θα πρέπει να το λαμβάνουν υπόψη στην αρχιτεκτονική, αλλά για τους χρήστες αυτή η προσέγγιση απλοποιεί την αλληλεπίδραση: χωρίς διαλόγους κατά την πρώτη εκκίνηση.

Ιστορία εμφάνισης της κατηγορίας

Ο διαχωρισμός σε κανονικά και επικίνδυνα δικαιώματα εμφανίστηκε στο Android 6.0 Marshmallow (API 23). Πριν από αυτήν την έκδοση, όλα τα δικαιώματα ζητούνταν κατά την εγκατάσταση — ο χρήστης έβλεπε μια ενιαία λίστα και την αποδεχόταν ή την απέρριπτε στο σύνολό της. Το Normal Permission διατήρησε αυτό το μοντέλο για λειτουργίες χαμηλού κινδύνου, ενώ το Dangerous πέρασε σε runtime αίτημα. Αυτή η αλλαγή βελτίωσε την εμπειρία χρήστη και ταυτόχρονα αύξησε την ασφάλεια.

Ποια API απαιτούν Normal Permission

Πολλά API συστήματος Android απαιτούν ρητή αναφορά κανονικού δικαιώματος, ακόμα κι αν η πρόσβαση είναι αυτόματη. Για παράδειγμα, η κλάση ConnectivityManager απαιτεί ACCESS_NETWORK_STATE, το VibratorService απαιτεί VIBRATE, το WifiManager απαιτεί ACCESS_WIFI_STATE. Χωρίς δήλωση του αντίστοιχου uses-permission, η κλήση αυτών των API θα οδηγήσει σε SecurityException.

Πώς λειτουργεί το ProtectionLevel normal

ProtectionLevel normal — το ελάχιστο επίπεδο προστασίας στο Android Permission System. Τα δικαιώματα με αυτό το επίπεδο δηλώνονται στο manifest και το σύστημα ελέγχει τη δήλωση κατά την εγκατάσταση, παρέχοντας πρόσβαση χωρίς παρέμβαση του χρήστη. Κανένα στοιχείο UI δεν εμφανίζεται, κανένα callback δεν καλείται.

Ο μηχανισμός ελέγχου λειτουργεί στο επίπεδο PackageManager. Κατά την εγκατάσταση του APK, το σύστημα σαρώνει όλες τις ετικέτες uses-permission, καθορίζει το επίπεδο προστασίας κάθε δικαιώματος μέσω αντιστοίχισης με ορισμούς συστήματος στα αρχεία permissions.xml και για normal-level απλώς καταγράφει την πρόσβαση. Η διαδικασία διαρκεί χιλιοστά του δευτερολέπτου και δεν απαιτεί αλληλεπίδραση με τη διεπαφή χρήστη.

Ο αλγόριθμος χορήγησης έχει ως εξής:

  • Το σύστημα διαβάζει το manifest τη στιγμή εγκατάστασης της εφαρμογής
  • Αντιστοιχίζει το protectionLevel στο /etc/permissions/ στη συσκευή
  • Στην τιμή normal — χορηγεί αυτόματα πρόσβαση
  • Το δικαίωμα παραμένει ενεργό έως την πλήρη διαγραφή της εφαρμογής

Ο χρήστης δεν μπορεί να ανακαλέσει το κανονικό δικαίωμα μέσω της διεπαφής. Στις ρυθμίσεις της εφαρμογής, στην ενότητα Δικαιώματα, εμφανίζονται μόνο τα επικίνδυνα δικαιώματα. Αυτό έρχεται σε αντίθεση με το iOS, όπου κάθε δικαίωμα απαιτεί ξεχωριστή επιβεβαίωση ανεξάρτητα από το επίπεδο ευαισθησίας της λειτουργίας.

Normal Permission vs Dangerous Permission

Normal και Dangerous Permission — δύο αντίθετες κατηγορίες προστασίας στο Android. Η κύρια διαφορά είναι στον τρόπο χορήγησης: τα κανονικά δίνονται αυτόματα κατά την εγκατάσταση, τα επικίνδυνα απαιτούν ρητή συγκατάθεση μέσω runtime διαλόγου. Αυτή η διαφορά είναι ενσωματωμένη στην αρχιτεκτονική ασφαλείας του Android από την έκδοση 6.0 Marshmallow.

Σύγκριση βασικών χαρακτηριστικών:

ΧαρακτηριστικόNormal PermissionDangerous Permission
ProtectionLevelnormaldangerous
Αίτημα χρήστηΔεν απαιτείταιRuntime διάλογος υποχρεωτικός
Δυνατότητα ανάκλησηςΌχι, μόνο διαγραφή εφαρμογήςΝαι, μέσω ρυθμίσεων ανά πάσα στιγμή
Έλεγχος στον κώδικαΠάντα PERMISSION_GRANTEDcheckSelfPermission υποχρεωτικός
ΠαραδείγματαINTERNET, VIBRATE, ACCESS_NETWORK_STATECAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION

Διαφορά στο αίτημα χρήστη

Ο χρήστης δεν βλέπει κανέναν διάλογο στο αίτημα Normal Permission. Εάν η εφαρμογή χρειάζεται INTERNET — το λαμβάνει σιωπηλά. Για Dangerous Permission, το σύστημα εμφανίζει ένα modal dialog με περιγραφή της ζητούμενης πρόσβασης. Ο χρήστης πατάει Allow ή Deny και αργότερα μπορεί να ανακαλέσει το δικαίωμα ανά πάσα στιγμή μέσω Settings. Αυτή είναι η βασική διαφορά UX που καθορίζει τη στρατηγική ανάπτυξης της διεπαφής.

Πότε να επιλέξετε Normal

Το Normal πρέπει να χρησιμοποιείται σε όλες τις περιπτώσεις όπου η πρόσβαση δεν αφορά ευαίσθητα δεδομένα. ACCESS_NETWORK_STATE για έλεγχο σύνδεσης, VIBRATE για απτική ανάδραση, INTERNET για HTTP αιτήματα — όλα αυτά είναι κανονικά δικαιώματα. Η εφαρμογή επιπέδου dangerous όπου αρκεί το normal είναι κακή πρακτική, δημιουργεί περιττούς διαλόγους και μειώνει την εμπιστοσύνη του χρήστη στην εφαρμογή.

Λίστα κανονικών δικαιωμάτων στο Android

Το Android ορίζει δεκάδες κανονικά δικαιώματα, καθένα από τα οποία αντιστοιχεί σε μια συγκεκριμένη λειτουργία συστήματος. Όλα είναι προσβάσιμα μέσω σταθερών της κλάσης Manifest.permission. Ακολουθεί μια λίστα με τα πιο συχνά χρησιμοποιούμενα στην ανάπτυξη εφαρμογών.

ΣταθεράΠρόσβασηΠεριγραφή
INTERNETΔίκτυοΆνοιγμα δικτυακών sockets για HTTP αιτήματα
ACCESS_NETWORK_STATEΔίκτυοΛήψη πληροφοριών σχετικά με την κατάσταση του δικτύου
ACCESS_WIFI_STATEWi-FiΑνάγνωση πληροφοριών για συνδέσεις Wi-Fi
VIBRATEΔόνησηΈλεγχος του κινητήρα δόνησης της συσκευής
BLUETOOTHBluetoothΣύνδεση με συσκευές Bluetooth
WAKE_LOCKΤροφοδοσίαΑποτροπή μετάβασης του επεξεργαστή σε κατάσταση ύπνου
SET_ALARMΞυπνητήριΡύθμιση ξυπνητηριού μέσω AlarmManager
CHANGE_NETWORK_STATEΔίκτυοΑλλαγή κατάστασης δικτυακής σύνδεσης

Ομάδες κανονικών δικαιωμάτων

Τα κανονικά δικαιώματα δεν ομαδοποιούνται σε Permission Group για σκοπούς εμφάνισης στο UI. Οι ομάδες στο Android προορίζονται για την οθόνη ρυθμίσεων, όπου εμφανίζονται μόνο τα επικίνδυνα δικαιώματα. Ωστόσο, λογικά τα κανονικά δικαιώματα μπορούν να χωριστούν σε κατηγορίες: δικτυακά (INTERNET, ACCESS_NETWORK_STATE), υλικού (VIBRATE, WAKE_LOCK), συστήματος (SET_ALARM) και Bluetooth δικαιώματα.

Ορισμένες σταθερές από το Manifest.permission μπορεί να αλλάξουν το επίπεδο προστασίας σε διαφορετικές εκδόσεις Android. Για παράδειγμα, το BLUETOOTH_CONNECT στο Android 12+ έγινε επικίνδυνο δικαίωμα με runtime αίτημα, αν και σε παλαιότερες εκδόσεις ήταν normal. Οι προγραμματιστές συνιστάται να ελέγχουν το τρέχον protectionLevel για το στοχευόμενο API μέσω τεκμηρίωσης.

Έλεγχος Normal Permission μέσω PackageManager

Ο προγραμματιστής μπορεί να ελέγξει προγραμματιστικά εάν ένα δικαίωμα είναι κανονικό μέσω PackageManager. Η μέθοδος getPermissionInfo επιστρέφει PermissionInfo, του οποίου το πεδίο protectionLevel περιέχει τη σημαία PermissionInfo.PROTECTION_NORMAL. Αυτό είναι χρήσιμο για δυναμική επεξεργασία και εντοπισμό σφαλμάτων.

kotlin
fun isNormalPermission(permission: String): Boolean {
    val pm = packageManager
    val info = pm.getPermissionInfo(
        permission,
        PackageManager.GET_META_DATA
    )
    return info.protectionLevel ==
        PermissionInfo.PROTECTION_NORMAL
}

Πώς να δηλώσετε Normal Permission στο manifest

Η δήλωση Normal Permission στο AndroidManifest.xml είναι η απλούστερη λειτουργία, που απαιτεί μόνο μία ετικέτα uses-permission. Πρόσθετη διαμόρφωση protectionLevel δεν απαιτείται, καθώς το επίπεδο προστασίας καθορίζεται από τον ορισμό συστήματος, όχι από το manifest της εφαρμογής. Ο προγραμματιστής απλώς αναφέρει το πλήρες όνομα της σταθεράς.

xml
<!-- AndroidManifest.xml -->
<uses-permission
    android:name="android.permission.INTERNET" />
<uses-permission
    android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
    android:name="android.permission.VIBRATE" />

Το σύστημα κατά την εγκατάσταση επεξεργάζεται όλες τις δηλώσεις. Εάν τουλάχιστον ένα από τα αναφερόμενα δικαιώματα έχει protectionLevel διαφορετικό από normal, θα απαιτηθεί runtime αίτημα. INTERNET — το πιο δημοφιλές κανονικό δικαίωμα, παρόν στις περισσότερες εφαρμογές Android, ιδιαίτερα σε εκείνες που εκτελούν HTTP αιτήματα ή φορτώνουν περιεχόμενο από το δίκτυο.

Παράδειγμα πλήρους manifest

Το πλήρες παράδειγμα AndroidManifest.xml με κανονικά και επικίνδυνο δικαίωμα δείχνει τη διαφορά: συντακτικά οι ετικέτες uses-permission είναι ίδιες, αλλά στη φάση εκτέλεσης τα INTERNET και VIBRATE θα χορηγηθούν αυτόματα, ενώ το CAMERA θα απαιτήσει διάλογο.

xml
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Normal permissions -->
    <uses-permission
        android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.VIBRATE" />

    <!-- Dangerous permission -->
    <uses-permission
        android:name="android.permission.CAMERA" />
</manifest>

Manifest Merger και Normal Permission

Κατά τη χρήση βιβλιοθηκών — Google Play Services, Firebase, Glide — αυτές μπορούν να προσθέσουν δικά τους uses-permission στο τελικό manifest μέσω Manifest Merger. Ορισμένες από αυτές είναι κανονικές (INTERNET για Firebase), άλλες επικίνδυνες (ACCESS_FINE_LOCATION για Google Maps). Ο προγραμματιστής θα πρέπει να ελέγχει το τελικό συγχωνευμένο manifest στο build/outputs/logs/manifest-merger-report.txt πριν από τη δημοσίευση.

Περιορισμοί του Normal Permission

Normal Permission έχει δύο βασικούς περιορισμούς: αδυναμία ανάκλησης από τον χρήστη και απουσία UI για διαχείριση. Εάν ο χρήστης δεν εμπιστεύεται την εφαρμογή, αλλά το κανονικό δικαίωμα έχει ήδη χορηγηθεί αυτόματα — η μόνη λύση είναι η διαγραφή της εφαρμογής. Αυτό δημιουργεί συγκεκριμένο κίνδυνο, καθώς τα κανονικά δικαιώματα δεν μπλοκάρονται από τα τυπικά εργαλεία του Android.

Ένας πρόσθετος περιορισμός εμφανίζεται σε συσκευές με πολλαπλά προφίλ (Work Profile, Multiple Users). Το Normal Permission χορηγείται αμέσως για όλα τα προφίλ — η εφαρμογή δεν μπορεί να περιορίσει το δικαίωμα μόνο σε ένα. Σε εταιρικά σενάρια, αυτό επιλύεται μέσω Managed Configurations.

Δεν είναι δυνατόν να ελεγχθεί εάν η εφαρμογή χρησιμοποιεί το Normal Permission τη δεδομένη στιγμή. Η μέθοδος συστήματος checkSelfPermission λειτουργεί μόνο για επικίνδυνα δικαιώματα. Για normal επιστρέφει πάντα PERMISSION_GRANTED, το οποίο δεν αντικατοπτρίζει την πραγματική δραστηριότητα. Αυτό πρέπει να λαμβάνεται υπόψη κατά τον έλεγχο ασφαλείας και την ανάλυση συμπεριφοράς της εφαρμογής.

Επίσης, αξίζει να σημειωθεί ότι ορισμένοι κατασκευαστές συσκευών (Xiaomi, Huawei, Samsung) τροποποιούν την τυπική συμπεριφορά των δικαιωμάτων. Στο υλικολογισμικό τους, το Normal Permission μπορεί να απαιτεί πρόσθετες άδειες στο ιδιόκτητο περιβάλλον MIUI ή EMUI. Οι προγραμματιστές συνιστάται να δοκιμάζουν τη λειτουργία σε πραγματικές συσκευές διαφορετικών κατασκευαστών.

Συχνές Ερωτήσεις

Σε τι διαφέρει το Normal Permission από το Dangerous;

Normal Permission χορηγείται αυτόματα κατά την εγκατάσταση χωρίς διάλογο. Το Dangerous απαιτεί runtime αίτημα με ρητή συγκατάθεση του χρήστη και μπορεί να ανακληθεί μέσω ρυθμίσεων. Το Normal χρησιμοποιεί ProtectionLevel normal, το Dangerous — protectionLevel dangerous.

Χρειάζεται να γράψω κώδικα για το Normal Permission;

Όχι, για τα κανονικά δικαιώματα αρκεί να δηλώσετε uses-permission στο AndroidManifest.xml. Κώδικας για αίτημα δεν απαιτείται — το σύστημα παρέχει πρόσβαση αυτόματα. Αυτό τα διαφοροποιεί από τα επικίνδυνα, όπου χρειάζεται ActivityCompat.requestPermissions.

Ποια Normal Permission είναι τα πιο δημοφιλή;

Τα πιο συχνά χρησιμοποιούμενα: INTERNET (δικτυακά αιτήματα), ACCESS_NETWORK_STATE (έλεγχος σύνδεσης), VIBRATE (απτική ανάδραση) και WAKE_LOCK (διατήρηση επεξεργαστή). Σχεδόν κάθε εφαρμογή Android χρησιμοποιεί τουλάχιστον INTERNET.

Μπορεί να ανακληθεί το Normal Permission;

Όχι, το Normal Permission δεν μπορεί να ανακληθεί μέσω των ρυθμίσεων της εφαρμογής. Ο μόνος τρόπος να σταματήσει η πρόσβαση είναι η διαγραφή της εφαρμογής. Αυτή είναι η βασική διαφορά από τα επικίνδυνα δικαιώματα, τα οποία ο χρήστης μπορεί να απενεργοποιήσει ανά πάσα στιγμή.

Πώς ελέγχω το ProtectionLevel ενός δικαιώματος;

Χρησιμοποιήστε το PackageManager.getPermissionInfo, μεταβιβάζοντας το όνομα του δικαιώματος. Η μέθοδος επιστρέφει PermissionInfo με το πεδίο protectionLevel. Συγκρίνετε με τις σταθερές PermissionInfo.PROTECTION_NORMAL ή PROTECTION_DANGEROUS για να προσδιορίσετε την κατηγορία.

Σύνοψη

  • Normal Permission — κατηγορία δικαιωμάτων Android με ProtectionLevel normal, που χορηγούνται αυτόματα κατά την εγκατάσταση.
  • Για δήλωση αρκεί η ετικέτα uses-permission στο AndroidManifest.xml χωρίς runtime κώδικα.
  • Διαφέρουν από τα επικίνδυνα λόγω απουσίας διαλόγου, αδυναμίας ανάκλησης και χαμηλού επιπέδου κινδύνου.
  • Πιο δημοφιλή: INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE και WAKE_LOCK.
  • Το ProtectionLevel ελέγχεται μέσω PackageManager.getPermissionInfo στον κώδικα.
  • Τα κανονικά δικαιώματα δεν εμφανίζονται στην οθόνη ρυθμίσεων της εφαρμογής.
  • Κατά τη χρήση βιβλιοθηκών, ελέγξτε το τελικό manifest μέσω Manifest Merger.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης