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 را در مانیفست اضافه کنید — هیچ دیالوگی به کاربر نشان داده نمی‌شود.
  • تفاوت اصلی با مجوزهای خطرناک — عدم وجود درخواست 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)، حدود ۴۰ درصد از تمام مجوزهای سیستمی در رده عادی قرار دارند.

ویژگی مهم — مجوزهای عادی در زمان اجرا از طریق 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 است. مجوزهای با این سطح در مانیفست اعلام می‌شوند و سیستم هنگام نصب اعلامیه را بررسی کرده و بدون دخالت کاربر دسترسی را اعطا می‌کند. هیچ عنصر UI نمایش داده نمی‌شود، هیچ callbackی فراخوانی نمی‌شود.

مکانیسم بررسی در سطح PackageManager کار می‌کند. هنگام نصب APK، سیستم تمام تگ‌های uses-permission را اسکن می‌کند، سطح حفاظت هر مجوز را از طریق تطبیق با تعاریف سیستمی در فایل‌های permissions.xml تعیین می‌کند و برای normal-level به سادگی دسترسی را ثبت می‌کند. این فرآیند میلی‌ثانیه طول می‌کشد و نیازی به تعامل با رابط کاربری ندارد.

الگوریتم اعطا به صورت زیر است:

  • سیستم در لحظه نصب برنامه مانیفست را می‌خواند
  • protectionLevel را در /etc/permissions/ روی دستگاه تطبیق می‌دهد
  • در مقدار normal — به طور خودکار دسترسی را اعطا می‌کند
  • مجوز تا حذف کامل برنامه فعال می‌ماند

کاربر نمی‌تواند مجوز عادی را از طریق رابط کاربری لغو کند. در تنظیمات برنامه در بخش مجوزها فقط مجوزهای خطرناک نمایش داده می‌شوند. این در تضاد با iOS است، جایی که هر مجوز صرف‌نظر از سطح حساسیت عملکرد نیاز به تأیید جداگانه دارد.

Normal Permission در مقابل Dangerous Permission

Normal و Dangerous Permission — دو دسته حفاظتی متضاد در Android. تفاوت اصلی در روش اعطا است: مجوزهای عادی هنگام نصب به طور خودکار داده می‌شوند، مجوزهای خطرناک نیاز به رضایت صریح از طریق دیالوگ runtime دارند. این تفاوت در معماری امنیتی Android از نسخه ۶.۰ Marshmallow تعبیه شده است.

مقایسه ویژگی‌های کلیدی:

ویژگیNormal PermissionDangerous Permission
ProtectionLevelnormaldangerous
درخواست از کاربرنیاز نیستدیالوگ runtime الزامی
امکان لغوخیر، فقط حذف برنامهبله، از طریق تنظیمات در هر لحظه
بررسی در کدهمیشه PERMISSION_GRANTEDcheckSelfPermission الزامی
نمونه‌هاINTERNET, VIBRATE, ACCESS_NETWORK_STATECAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION

تفاوت در درخواست از کاربر

کاربر در درخواست Normal Permission هیچ دیالوگی نمی‌بیند. اگر برنامه به INTERNET نیاز دارد — آن را بی‌صدا دریافت می‌کند. برای Dangerous Permission سیستم یک دیالوگ مودال با توضیح دسترسی درخواستی نشان می‌دهد. کاربر دکمه Allow یا Deny را فشار می‌دهد و بعداً می‌تواند در هر لحظه از طریق Settings مجوز را لغو کند. این تفاوت اصلی UX است که استراتژی توسعه رابط را تعیین می‌کند.

چه زمانی Normal را انتخاب کنیم

Normal باید در تمام مواردی که دسترسی به داده‌های حساس مربوط نیست استفاده شود. ACCESS_NETWORK_STATE برای بررسی اتصال، VIBRATE برای بازخورد لمسی، INTERNET برای درخواست‌های HTTP — همه اینها مجوزهای عادی هستند. استفاده از سطح dangerous در جایی که normal کافی است، رویه بدی است که دیالوگ‌های اضافی ایجاد می‌کند و اعتماد کاربر به برنامه را کاهش می‌دهد.

فهرست مجوزهای عادی در Android

Android تعریف می‌کند ده‌ها مجوز عادی که هر کدام با یک تابع سیستمی خاص مطابقت دارند. همه آنها از طریق ثابت‌های کلاس Manifest.permission قابل دسترسی هستند. در زیر فهرست پرکاربردترین‌ها در توسعه برنامه آورده شده است.

ثابتدسترسیتوضیح
INTERNETشبکهباز کردن سوکت‌های شبکه برای درخواست‌های HTTP
ACCESS_NETWORK_STATEشبکهدریافت اطلاعات درباره وضعیت شبکه
ACCESS_WIFI_STATEWi-Fiخواندن اطلاعات درباره اتصالات Wi-Fi
VIBRATEلرزشکنترل موتور لرزش دستگاه
BLUETOOTHBluetoothاتصال به دستگاه‌های Bluetooth
WAKE_LOCKتغذیهجلوگیری از خواب رفتن پردازنده
SET_ALARMزنگ هشدارتنظیم زنگ هشدار از طریق AlarmManager
CHANGE_NETWORK_STATEشبکهتغییر وضعیت اتصال شبکه

گروه‌های مجوزهای عادی

مجوزهای عادی برای اهداف نمایش در UI در Permission Group گروه‌بندی نمی‌شوند. گروه‌ها در 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 در مانیفست

اعلان Normal Permission در AndroidManifest.xml ساده‌ترین عملیات است که یک تگ uses-permission نیاز دارد. پیکربندی اضافی protectionLevel لازم نیست، زیرا سطح حفاظت توسط تعریف سیستمی تعیین می‌شود، نه مانیفست برنامه. توسعه‌دهنده به سادگی نام کامل ثابت را مشخص می‌کند.

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 انجام می‌دهند یا محتوا را از شبکه بارگذاری می‌کنند.

مثال مانیفست کامل

مثال کامل 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 — آنها می‌توانند از طریق Manifest Merger uses-permission خود را به مانیفست نهایی اضافه کنند. برخی از آنها عادی هستند (INTERNET برای Firebase)، برخی دیگر خطرناک (ACCESS_FINE_LOCATION برای Google Maps). توسعه‌دهنده باید مانیفست ادغام‌شده نهایی را در 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 Merger بررسی کنید.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید