از 27 مارس 2025، توصیه می کنیم از android-latest-release
به جای aosp-main
برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
شناسههای دستگاه غیرقابل تغییر
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
در Android 6 و بالاتر، ارائه دهندگان خدمات Wi-Fi و تحلیلگرهای بسته از بازیابی آدرس MAC کارخانه دستگاه از طریق پشته Wi-Fi از درخواست های شبکه محدود شده اند. با شروع Android 10، محدودیتهای اضافی اعمال میشود که دسترسی به شناسههای دستگاه (ID) را به برنامههایی با سطح مجوز ممتاز محدود میکند. این از شناسه های دستگاه مانند
- شماره تلفن IMEI، MEID، ESN و IMSI.
- شماره سریال ساخت، سیم کارت یا USB.
چه کسی می تواند به شناسه دستگاه دسترسی داشته باشد
شناسههای دستگاه در همه دستگاههای Android 10 محدود شده است، حتی اگر برنامهها Android 9 یا پایینتر را هدف قرار دهند. به شناسههای دستگاه میتوان با موارد زیر دسترسی داشت:
دسترسی به بسته های ممتاز
یک بسته برای دسترسی به شناسه های دستگاه باید دارای امتیاز باشد. باید مجوز READ_PRIVILEGED_PHONE_STATE
در کلاس Manifest.permission
داشته باشد و در فایل privapp-permission.xml
در لیست مجاز باشد. برای اطلاعات در مورد فرآیند لیست مجاز، به فهرست مجاز مجوزهای ممتاز مراجعه کنید.
برای کسب اطلاعات در مورد دریافت شناسه منحصر به فرد برای یک بسته غیرمجاز ، به موارد استفاده رایج و شناسه مناسب برای استفاده مراجعه کنید.
شناسههای دستگاه محدود و آدرسهای MAC تصادفیشده
برای محدود کردن بیشتر شناسههای دستگاه، همه دستگاههای Android 10 بهطور پیشفرض آدرسهای MAC تصادفیشده را برای هر دو درخواست و درخواستهای مرتبط ارسال میکنند و باید یک آدرس MAC تصادفی متفاوت برای هر SSID داشته باشند. از آدرس MAC کارخانه دستگاه در حالت سرویس گیرنده، نقطه دسترسی نرم (AP) یا موارد استفاده از Wi-Fi Direct استفاده نکنید. باید از APIهای قابل دسترسی عمومی که برنامههای ممتاز نیستند، پنهان بماند. برنامههای ممتازی که نیاز به بازگرداندن آدرس MAC کارخانه دارند، باید مجوز LOCAL_MAC_ADDRESS
داشته باشند.
کاربران این گزینه را دارند که آدرس MAC تصادفی پیش فرض را که به هر SSID اختصاص داده شده است، نگه دارند. این گزینه در قسمت Privacy در تنظیمات > جزئیات شبکه قابل مشاهده است. برای کسب اطلاعات در مورد به دست آوردن یک آدرس MAC تصادفی به آدرس های MAC تصادفی مراجعه کنید.

شکل 1. آدرس MAC به صورت تصادفی در زیر Privacy در جزئیات شبکه نشان داده شده است.
برنامههایی که APIهای شناسه دستگاه را فراخوانی میکنند
برنامههایی که APIهای شناسه دستگاه را فراخوانی میکنند باید الزامات Android 10 را برآورده کنند. در غیر این صورت، هنگامی که آنها سعی می کنند به شناسه های دستگاه دسترسی پیدا کنند، موارد زیر برگردانده می شود:
- برنامه هایی که اندروید 10 را هدف قرار می دهند
- برنامه هایی که اندروید 9 یا نسخه های قبلی را هدف قرار می دهند
- اگر مجوز
READ_PHONE_STATE
را داشته باشند، یک پاسخ null
یا داده های مکان نگهدار برگردانده می شود. - اگر این کار را انجام ندهند، APIهای شناسه دستگاه،
SecurityException
را پرتاب میکنند که حاوی نام روش فراخوانی شده است، و نشان میدهد که برنامه تماسگیرنده شرایط لازم برای دسترسی به شناسه درخواستی را برآورده نمیکند.
برای اطلاعات بیشتر در مورد شناسههای دستگاه غیرقابل تغییر، به شناسههای دستگاه غیرقابل تنظیم و بهترین روشها برای شناسههای منحصربهفرد مراجعه کنید.
تست کردن
برنامهها باید از دسترسی به شماره سریال دستگاه و در صورت لزوم به IMEI یا MEID، شماره سریال سیمکارت و شناسه مشترک جلوگیری کنند. برنامههایی که مجوز دسترسی به این شناسهها را دارند نیز باید یکی از معیارهای فهرست شده در زیر چه کسی میتواند به شناسههای دستگاه دسترسی داشته باشد، داشته باشد.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Immutable device IDs\n\nIn Android 6 and higher, Wi-Fi service providers and packet analyzers have\nbeen restricted from retrieving a device's factory MAC address through the\nWi-Fi stack from network requests. Starting in Android 10, additional restrictions are in place that limit access to device\nidentifiers (IDs) to apps with the [privileged](/docs/core/permissions/perms-allowlist)[permission\nlevel](https://developer.android.com/reference/android/R.attr.html#protectionLevel). This protects device IDs such as\n\n- telephony IMEI, MEID, ESN, and IMSI numbers.\n- build, SIM, or USB serial numbers.\n\n### Who can access device IDs\n\nDevice IDs are restricted on all Android 10\ndevices, even if apps target Android 9 or lower. Device IDs can be accessed by:\n\n- The default SMS app.\n- Apps with both [READ_PRIVILEGED_PHONE_STATE](/docs/core/permissions/perms-allowlist#customizing-allowlists) permission in the `\n `[Manifest.permission](https://developer.android.com/reference/android/Manifest.permission) class, and allowlisting in the `privapp-permission.xml` file. These must also be loaded in the `priv-app` directory.\n- Apps with carrier privileges as defined in [UICC Carrier\n Privileges](/docs/core/connect/uicc).\n- A device owner or profile owner with [READ_PHONE_STATE](https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE) permission granted in the [Manifest.permission](https://developer.android.com/reference/android/Manifest.permission) class. (Allowlisting isn't required.)\n\n#### Privileged packages access\n\nA package must be privileged to access device IDs. It must have\n[READ_PRIVILEGED_PHONE_STATE](/docs/core/permissions/perms-allowlist#customizing-allowlists) permission in the\n`Manifest.permission` class, and be allowlisted in the\n`privapp-permission.xml` file. For information on the allowlist\nprocess, see [Privileged\nPermission Allowlisting](/docs/core/permissions/perms-allowlist).\n\nFor information on getting a unique ID for a *nonprivileged* package,\nrefer to [Common use cases and the appropriate identifier to use](https://developer.android.com/training/articles/user-data-ids#common-use-cases).\n\n#### Restricted device IDs and randomized MAC addresses\n\nTo further restrict device IDs, all devices on Android 10 transmit randomized MAC addresses by default for both\nprobe and associated requests, and must have a different randomized MAC address\nfor each SSID. Don't use the device factory MAC address in client mode, soft\naccess point (AP), or Wi-Fi Direct use cases. It must remain hidden from\npublicly accessible APIs that aren't privileged apps. Privileged apps that\nrequire the factory MAC address to be returned are required to have\n`LOCAL_MAC_ADDRESS` permission.\n\nUsers have the option to keep the *default randomized* MAC address that's assigned to each SSID.\nThe option is viewable under **Privacy** in\n**Settings** \\\u003e **Network details** . To learn about\nobtaining a randomized MAC address see [Randomized MAC addresses](https://developer.android.com/about/versions/10/privacy/changes#data-ids).\n\n**Figure 1.**MAC address shows as randomized under Privacy in Network details.\n\n#### Apps that invoke device ID APIs\n\nApps that invoke device ID APIs must meet the Android 10 requirements. Otherwise, when they try to access\ndevice IDs the following is returned:\n\n- Apps targeting Android 10\n - [SecurityException](https://developer.android.com/reference/java/lang/SecurityException) is thrown from the device ID APIs.\n- Apps targeting Android 9 or earlier\n - If they have the [READ_PHONE_STATE](https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE) permission, either a `null` response or placeholder data is returned.\n - If they don't, the device ID APIs throw [SecurityException](https://developer.android.com/reference/java/lang/SecurityException) that contains the name of the method called, and an indication that the calling app doesn't meet the requirements to access the requested ID.\n\nFor more on immutable device IDs see [Nonresettable\ndevice identifiers](https://developer.android.com/about/versions/10/privacy/changes#data-ids) and [best practices\nfor unique identifiers](https://developer.android.com/training/articles/user-data-ids).\n\n### Testing\n\nApps *must* be prevented from accessing the device serial number and,\nwhere applicable, IMEI or MEID, SIM serial number, and subscriber ID. Apps with\npermission to access these IDs must also meet one of the criteria listed under\n[Who can access device IDs](#who-access)."]]