اندروید ۱۰ (سطح API ۲۹) تعدادی ویژگی و تغییر رفتاری را برای محافظت بهتر از حریم خصوصی کاربران معرفی میکند. این تغییرات، شفافیت و کنترلی را که کاربران بر دادههای خود و قابلیتهایی که به برنامهها میدهند، گسترش میدهد. این ویژگیها ممکن است به این معنی باشد که رفتارها یا دادههای خاصی که برنامه شما به آنها وابسته است، ممکن است در مقایسه با نسخههای قدیمیتر پلتفرم، رفتار متفاوتی داشته باشند. اگر برنامه شما از بهترین شیوههای فعلی برای مدیریت دادههای کاربر پیروی کند، تأثیرات بر برنامه شما باید حداقل باشد.
در این صفحه خلاصهای از هر تغییر فهرست شده است.
تغییرات برتر
این بخش شامل تغییرات کلیدی در اندروید ۱۰ مربوط به حریم خصوصی است.
دسترسی به حافظه خارجی محدود به فایلها و رسانههای برنامه
به طور پیشفرض، برنامههایی که اندروید ۱۰ و بالاتر را هدف قرار میدهند، دسترسی محدود به حافظه خارجی یا فضای ذخیرهسازی محدود دارند. چنین برنامههایی میتوانند انواع فایلهای زیر را در یک دستگاه ذخیرهسازی خارجی بدون نیاز به درخواست مجوزهای کاربری مرتبط با فضای ذخیرهسازی مشاهده کنند:
- فایلهای موجود در دایرکتوری مخصوص برنامه که با استفاده از
getExternalFilesDir()قابل دسترسی هستند. - عکسها، ویدیوها و کلیپهای صوتی که برنامه از فروشگاه رسانه ایجاد کرده است.
برای کسب اطلاعات بیشتر در مورد ذخیرهسازی محدود و همچنین نحوه اشتراکگذاری، دسترسی و تغییر فایلهای ذخیره شده در دستگاههای ذخیرهسازی خارجی، به راهنماهای مربوط به نحوه مدیریت فایلها در ذخیرهسازی خارجی و دسترسی و تغییر فایلهای رسانهای مراجعه کنید.
دسترسی به موقعیت مکانی دستگاه در پسزمینه نیاز به مجوز دارد
برای پشتیبانی از کنترل بیشتری که کاربران بر دسترسی یک برنامه به اطلاعات موقعیت مکانی دارند، اندروید ۱۰ مجوز ACCESS_BACKGROUND_LOCATION را معرفی میکند.
برخلاف مجوزهای ACCESS_FINE_LOCATION و ACCESS_COARSE_LOCATION ، مجوز ACCESS_BACKGROUND_LOCATION فقط زمانی که برنامه در پسزمینه اجرا میشود، دسترسی به موقعیت مکانی را تحت تأثیر قرار میدهد. یک برنامه در پسزمینه به موقعیت مکانی دسترسی دارد، مگر اینکه یکی از شرایط زیر برقرار باشد:
- یک فعالیت متعلق به برنامه قابل مشاهده است.
این برنامه یک سرویس پیشزمینه را اجرا میکند که نوع سرویس پیشزمینه
locationرا اعلام کرده است.برای اعلام نوع سرویس پیشزمینه برای یک سرویس در برنامه خود،
targetSdkVersionیاcompileSdkVersionبرنامه خود را روی29یا بالاتر تنظیم کنید. درباره اینکه چگونه سرویسهای پیشزمینه میتوانند اقدامات آغاز شده توسط کاربر را که نیاز به دسترسی به موقعیت مکانی دارند، ادامه دهند ، بیشتر بیاموزید.
اگر برنامه شما geofences ایجاد و نظارت میکند و اندروید ۱۰ (سطح API ۲۹) یا بالاتر را هدف قرار میدهد، باید مجوز ACCESS_BACKGROUND_LOCATION را اعلام کنید.
دسترسی به طور خودکار هنگام هدف قرار دادن اندروید ۹ یا پایینتر اعطا میشود
اگر برنامه شما روی اندروید ۱۰ یا بالاتر اجرا میشود اما اندروید ۹ (سطح API 28) یا پایینتر را هدف قرار میدهد، پلتفرم رفتار زیر را اعمال میکند:
- اگر برنامه شما برای
ACCESS_FINE_LOCATIONیاACCESS_COARSE_LOCATIONیک عنصر<uses-permission>تعریف کند، سیستم به طور خودکار در حین نصب یک عنصر<uses-permission>برایACCESS_BACKGROUND_LOCATIONاضافه میکند. - اگر برنامه شما
ACCESS_FINE_LOCATIONیاACCESS_COARSE_LOCATIONدرخواست کند، سیستم به طور خودکارACCESS_BACKGROUND_LOCATIONرا به درخواست اضافه میکند.
دسترسی هنگام ارتقاء دستگاه به اندروید ۱۰
اگر کاربری به برنامه شما اجازه دسترسی به موقعیت مکانی دستگاه - چه ACCESS_COARSE_LOCATION و چه ACCESS_FINE_LOCATION - را بدهد و سپس دستگاه خود را از اندروید ۹ به اندروید ۱۰ ارتقا دهد، سیستم به طور خودکار مجموعه مجوزهای مبتنی بر موقعیت مکانی اعطا شده به برنامه شما را بهروزرسانی میکند. مجموعه مجوزهایی که برنامه شما پس از ارتقا دریافت میکند، به نسخه SDK هدف و مجوزهای تعریف شده آن بستگی دارد، همانطور که در جدول زیر نشان داده شده است:
جدول ۱. تغییرات در وضعیت مجوز موقعیت مکانی پس از ارتقاء دستگاه به اندروید ۱۰
| نسخه پلتفرم هدف | درشت یا ریز اجازه داده شد؟ | اجازه پسزمینه در مانیفست تعریف شده؟ | وضعیت مجوز پیشفرض بهروزرسانی شد |
|---|---|---|---|
| اندروید ۱۰ | بله | بله | دسترسی به پیشزمینه و پسزمینه |
| اندروید ۱۰ | بله | خیر | فقط دسترسی پیشزمینه |
| اندروید ۱۰ | خیر | (توسط سیستم نادیده گرفته میشود) | بدون دسترسی |
| اندروید ۹ یا پایینتر | بله | به طور خودکار توسط سیستم در زمان ارتقاء دستگاه اضافه میشود | دسترسی به پیشزمینه و پسزمینه |
| اندروید ۹ یا پایینتر | خیر | (توسط سیستم نادیده گرفته میشود) | بدون دسترسی |
توجه داشته باشید که کاربر میتواند این سطح دسترسی را حتی پس از بهروزرسانی خودکار دسترسی برنامه شما به موقعیت مکانی دستگاه توسط سیستم، تغییر دهد. به عنوان مثال، کاربر ممکن است دسترسی برنامه شما را فقط به پیشزمینه کاهش دهد یا دسترسی را به طور کامل لغو کند. قبل از تلاش برای دسترسی به موقعیت مکانی دستگاه، به ویژه در یک سرویس پیشزمینه، برنامه شما باید بررسی کند که آیا کاربر هنوز به برنامه شما اجازه میدهد این اطلاعات موقعیت مکانی را دریافت کند یا خیر.
هنگام بهروزرسانی سطح API هدف در دستگاههای اندروید ۱۰، دسترسی لغو شد
حالتی را در نظر بگیرید که برنامه شما از قبل روی دستگاهی که اندروید ۱۰ را اجرا میکند نصب شده است. اگر در این شرایط برنامه خود را برای اندروید ۱۰ بهروزرسانی کنید، دستگاه مجوز ACCESS_BACKGROUND_LOCATION را لغو میکند.
برای اطلاعات بیشتر در مورد نحوه بازیابی موقعیت مکانی دستگاه در حالی که برنامه شما در پسزمینه است، به راهنمای دریافت بهروزرسانیهای دورهای موقعیت مکانی مراجعه کنید.
محدودیتهای شروع فعالیتها از پسزمینه
از اندروید ۱۰ به بعد، سیستم محدودیتهایی برای شروع فعالیتها از پسزمینه اعمال میکند. این تغییر رفتار به حداقل رساندن وقفهها برای کاربر کمک میکند و کاربر را بیشتر بر آنچه روی صفحه نمایش داده میشود، کنترل میکند. تا زمانی که برنامه شما فعالیتها را به عنوان نتیجه مستقیم تعامل کاربر شروع کند، به احتمال زیاد برنامه شما تحت تأثیر این محدودیتها قرار نمیگیرد.
برای کسب اطلاعات بیشتر در مورد جایگزین پیشنهادی برای شروع فعالیتها از پسزمینه، به راهنمای نحوهی هشدار دادن به کاربران در مورد رویدادهای حساس به زمان در برنامهی خود مراجعه کنید.
شناسهها و دادهها
این بخش تغییرات مربوط به کار با شناسهها و دادههای دستگاه را فهرست میکند.
حذف وابستگی مخاطبین
از اندروید ۱۰ به بعد، این پلتفرم اطلاعات مربوط به وابستگی مخاطبین را پیگیری نمیکند. در نتیجه، اگر برنامه شما جستجویی در مخاطبین کاربر انجام دهد، نتایج بر اساس فراوانی تعامل مرتب نمیشوند.
راهنمای مربوط به ContactsProvider حاوی اطلاعیهای است که فیلدها و روشهای خاصی را که در همه دستگاههای اندروید ۱۰ به بعد منسوخ شدهاند، شرح میدهد.
تصادفیسازی آدرس مک
در دستگاههایی که اندروید ۱۰ یا بالاتر را اجرا میکنند، سیستم بهطور پیشفرض آدرسهای MAC تصادفی را ارسال میکند.
اگر برنامه شما یک مورد استفاده سازمانی را مدیریت میکند، پلتفرم APIهایی را برای چندین عملیات مرتبط با آدرسهای MAC ارائه میدهد:
- دریافت آدرس MAC تصادفی: برنامههای مالک دستگاه و برنامههای مالک پروفایل میتوانند با فراخوانی تابع
getRandomizedMacAddress()آدرس MAC تصادفی اختصاص داده شده به یک شبکه خاص را بازیابی کنند. - دریافت آدرس MAC واقعی کارخانه: برنامههای مالک دستگاه میتوانند با فراخوانی تابع
getWifiMacAddress()آدرس MAC سختافزاری واقعی دستگاه را بازیابی کنند. این روش برای ردیابی مجموعهی بزرگی از دستگاهها مفید است.
محدودیت دسترسی به فایل سیستم /proc/net
در دستگاههایی که اندروید ۱۰ یا بالاتر را اجرا میکنند، برنامهها نمیتوانند به /proc/net که شامل اطلاعاتی در مورد وضعیت شبکه دستگاه است، دسترسی داشته باشند. برنامههایی که نیاز به دسترسی به این اطلاعات دارند، مانند VPNها، باید از کلاس NetworkStatsManager یا ConnectivityManager استفاده کنند.
محدودیت روی شناسههای دستگاه غیرقابل تنظیم مجدد
از اندروید ۱۰ به بعد، برنامهها برای دسترسی به شناسههای غیرقابل تنظیم مجدد دستگاه، که شامل IMEI و شماره سریال میشود، باید مجوز ممتاز READ_PRIVILEGED_PHONE_STATE را داشته باشند.
روشهای تحت تأثیر شامل موارد زیر است:
-
Build -
TelephonyManager
اگر برنامه شما این مجوز را ندارد و شما به هر حال سعی میکنید اطلاعاتی در مورد شناسههای غیرقابل تنظیم مجدد درخواست کنید، پاسخ پلتفرم بر اساس نسخه SDK هدف متفاوت خواهد بود:
- اگر برنامه شما اندروید ۱۰ یا بالاتر را هدف قرار دهد، یک
SecurityExceptionرخ میدهد. - اگر برنامه شما اندروید ۹ (سطح API 28) یا پایینتر را هدف قرار میدهد، در صورتی که برنامه مجوز
READ_PHONE_STATEرا داشته باشد، این متدnullیا دادههای placeholder را برمیگرداند. در غیر این صورت، خطایSecurityExceptionرخ میدهد.
بسیاری از موارد استفاده نیازی به شناسههای دستگاه غیرقابل تنظیم مجدد ندارند. برای مثال، اگر برنامه شما از شناسههای دستگاه غیرقابل تنظیم مجدد برای اهداف ردیابی تبلیغات یا تجزیه و تحلیل کاربر استفاده میکند، به جای آن از یک شناسه تبلیغاتی اندروید برای آن موارد استفاده خاص استفاده کنید . برای کسب اطلاعات بیشتر، به بهترین شیوهها برای شناسههای منحصر به فرد مراجعه کنید.
دسترسی محدود به دادههای کلیپبورد
مگر اینکه برنامه شما ویرایشگر پیشفرض روش ورودی (IME) باشد یا برنامهای باشد که در حال حاضر فوکوس دارد، در غیر این صورت برنامه شما نمیتواند به دادههای کلیپبورد در اندروید ۱۰ یا بالاتر دسترسی داشته باشد.
محافظت از شماره سریال دستگاه USB
اگر برنامه شما اندروید ۱۰ یا بالاتر را هدف قرار داده است، تا زمانی که کاربر به برنامه شما اجازه دسترسی به دستگاه USB یا لوازم جانبی را نداده باشد، نمیتواند شماره سریال را بخواند.
برای کسب اطلاعات بیشتر در مورد کار با دستگاههای USB، به راهنمای نحوه پیکربندی میزبانهای USB مراجعه کنید.
دوربین و قابلیت اتصال
این بخش تغییرات خاص مربوط به فرادادههای دوربین و APIهای اتصال را فهرست میکند.
محدودیت دسترسی به جزئیات و فرادادههای دوربین
اندروید ۱۰ وسعت اطلاعاتی را که متد getCameraCharacteristics() به طور پیشفرض برمیگرداند، تغییر میدهد. به طور خاص، برنامه شما باید مجوز CAMERA را داشته باشد تا بتواند به فرادادههای بالقوه مختص دستگاه که در مقدار بازگشتی این متد گنجانده شده است، دسترسی داشته باشد.
برای کسب اطلاعات بیشتر در مورد این تغییرات، به بخش مربوط به فیلدهای دوربین که نیاز به مجوز دارند ، مراجعه کنید.
محدودیت در فعال و غیرفعال کردن وایفای
برنامههایی که اندروید ۱۰ یا بالاتر را هدف قرار میدهند، نمیتوانند وایفای را فعال یا غیرفعال کنند. متد WifiManager.setWifiEnabled() همیشه false برمیگرداند.
اگر نیاز دارید که از کاربران بخواهید وایفای را فعال و غیرفعال کنند، از یک پنل تنظیمات استفاده کنید.
محدودیتهای دسترسی مستقیم به شبکههای Wi-Fi پیکربندیشده
برای محافظت از حریم خصوصی کاربر، پیکربندی دستی فهرست شبکههای Wi-Fi به برنامههای سیستمی و کنترلکنندههای سیاست دستگاه (DPC) محدود شده است. یک DPC مشخص میتواند مالک دستگاه یا مالک پروفایل باشد.
اگر برنامه شما اندروید ۱۰ یا بالاتر را هدف قرار داده است و یک برنامه سیستمی یا DPC نیست، روشهای زیر دادههای مفیدی را برنمیگردانند:
متد
getConfiguredNetworks()همیشه یک لیست خالی برمیگرداند.هر متد عملیات شبکه که یک مقدار صحیح برمیگرداند -
addNetwork()وupdateNetwork()- همیشه -1 را برمیگرداند.هر عملیات شبکه که یک مقدار بولی برمیگرداند
removeNetwork()،reassociate()،enableNetwork()،disableNetwork()،reconnect()وdisconnect()- همیشه مقدارfalseرا برمیگرداند.
اگر برنامه شما نیاز به اتصال به شبکههای Wi-Fi دارد، از روشهای جایگزین زیر استفاده کنید:
- برای ایجاد یک اتصال محلی فوری به یک شبکه Wi-Fi، از
WifiNetworkSpecifierدر یک شیء استانداردNetworkRequestاستفاده کنید. - برای افزودن شبکههای وایفای جهت بررسی فراهم کردن دسترسی به اینترنت برای کاربر، با اشیاء
WifiNetworkSuggestionکار کنید. میتوانید شبکههایی را که در کادر انتخاب شبکه اتصال خودکار ظاهر میشوند، به ترتیب با فراخوانیaddNetworkSuggestions()وremoveNetworkSuggestions()اضافه و حذف کنید. این روشها به هیچ مجوز مکانی نیاز ندارند.
برخی از APIهای تلفن، بلوتوث و وایفای به مجوز موقعیت مکانی FINE نیاز دارند
اگر برنامه شما اندروید ۱۰ یا بالاتر را هدف قرار میدهد، برای استفاده از چندین متد در APIهای Wi-Fi، Wi-Fi Aware یا Bluetooth، باید مجوز ACCESS_FINE_LOCATION را داشته باشد. بخشهای زیر کلاسها و متدهای تحت تأثیر را فهرست میکنند.
تلفن
-
TelephonyManager-
getCellLocation() -
getAllCellInfo() -
requestNetworkScan() -
requestCellInfoUpdate() -
getAvailableNetworks() -
getServiceState()
-
-
TelephonyScanManager-
requestNetworkScan()
-
-
TelephonyScanManager.NetworkScanCallback-
onResults()
-
-
PhoneStateListener-
onCellLocationChanged() -
onCellInfoChanged() -
onServiceStateChanged()
-
وایفای
-
WifiManager-
startScan() -
getScanResults() -
getConnectionInfo() -
getConfiguredNetworks()
-
-
WifiAwareManager -
WifiP2pManager -
WifiRttManager
بلوتوث
-
BluetoothAdapter-
startDiscovery() -
startLeScan()
-
-
BluetoothAdapter.LeScanCallback -
BluetoothLeScanner-
startScan()
-
مجوزها
این بخش بهروزرسانیهای مدل مجوزهای اندروید را شرح میدهد.
دسترسی محدود به محتوای صفحه نمایش
برای محافظت از محتوای صفحه نمایش کاربران، اندروید ۱۰ با تغییر دامنه مجوزهای READ_FRAME_BUFFER ، CAPTURE_VIDEO_OUTPUT و CAPTURE_SECURE_VIDEO_OUTPUT از دسترسی بیصدا به محتوای صفحه نمایش دستگاه جلوگیری میکند. از اندروید ۱۰، این مجوزها فقط دسترسی امضا محور دارند.
برنامههایی که نیاز به دسترسی به محتوای صفحه نمایش دستگاه دارند، باید از API MediaProjection استفاده کنند که پیامی را نمایش میدهد و از کاربر میخواهد رضایت خود را اعلام کند.
بررسی مجوز کاربرپسند در برنامههای قدیمی
اگر برنامه شما اندروید ۵.۱ (سطح API ۲۲) یا پایینتر را هدف قرار میدهد، کاربران هنگام استفاده از برنامه شما در دستگاهی که برای اولین بار اندروید ۱۰ یا بالاتر را اجرا میکند، صفحهای از مجوزها را مشاهده میکنند، همانطور که در شکل ۱ نشان داده شده است. این صفحه به کاربران این امکان را میدهد که دسترسی به مجوزهایی را که سیستم قبلاً در زمان نصب به برنامه شما اعطا کرده بود، لغو کنند.
تشخیص فعالیت بدنی
اندروید ۱۰ مجوز زمان اجرای android.permission.ACTIVITY_RECOGNITION را برای برنامههایی که نیاز به تشخیص تعداد گامهای کاربر یا طبقهبندی فعالیت بدنی کاربر، مانند پیادهروی، دوچرخهسواری یا حرکت در وسیله نقلیه دارند، معرفی میکند. این مجوز به گونهای طراحی شده است که به کاربران امکان مشاهده نحوه استفاده از دادههای حسگر دستگاه در تنظیمات را میدهد.
برخی از کتابخانههای موجود در سرویسهای گوگل پلی، مانند API تشخیص فعالیت و API گوگل فیت ، نتایج را ارائه نمیدهند، مگر اینکه کاربر این اجازه را به برنامه شما داده باشد.
تنها حسگرهای داخلی دستگاه که نیاز به اعلام این مجوز از سوی شما دارند، حسگرهای گامشمار و گامشمار هستند.
اگر برنامه شما اندروید ۹ (سطح API 28) یا پایینتر را هدف قرار میدهد، سیستم در صورت نیاز، در صورتی که برنامه شما هر یک از شرایط زیر را داشته باشد، به طور خودکار مجوز android.permission.ACTIVITY_RECOGNITION را به برنامه شما اعطا میکند:
- فایل مانیفست شامل مجوز
com.google.android.gms.permission.ACTIVITY_RECOGNITIONاست. - فایل مانیفست شامل مجوز
android.permission.ACTIVITY_RECOGNITIONنمیشود .
اگر system-auto مجوز android.permission.ACTIVITY_RECOGNITION را اعطا کند، برنامه شما پس از بهروزرسانی برنامه برای هدف قرار دادن اندروید ۱۰، این مجوز را حفظ میکند. با این حال، کاربر میتواند این مجوز را در هر زمان در تنظیمات سیستم لغو کند.
گروههای مجوز از رابط کاربری حذف شدند
از اندروید ۱۰، برنامهها نمیتوانند نحوه گروهبندی مجوزها را در رابط کاربری جستجو کنند.