اندروید 10 (سطح API 29) تعدادی ویژگی و تغییرات رفتاری را برای محافظت بهتر از حریم خصوصی کاربران معرفی می کند. این تغییرات شفافیت و کنترلی را که کاربران بر روی داده های خود و قابلیت هایی که به برنامه ها می دهند، گسترش می دهد. این ویژگیها ممکن است به این معنی باشد که رفتارها یا دادههای خاصی که برنامه شما به آن وابسته است ممکن است در مقایسه با نسخههای قدیمیتر پلتفرم رفتار متفاوتی داشته باشد. اگر برنامه شما از بهترین شیوه های فعلی برای مدیریت داده های کاربر پیروی کند، تأثیرات روی برنامه شما باید حداقل باشد.
این صفحه خلاصه ای از هر تغییر را فهرست می کند.
تغییرات برتر
این بخش شامل تغییرات کلیدی اندروید 10 مربوط به حریم خصوصی است.
دسترسی به حافظه خارجی به فایلها و رسانههای برنامه
بهطور پیشفرض، به برنامههایی که Android 10 و بالاتر را هدف قرار میدهند ، به فضای ذخیرهسازی خارجی یا فضای ذخیرهسازی محدوده دسترسی دارند. چنین برنامههایی میتوانند انواع فایلهای زیر را در یک دستگاه ذخیرهسازی خارجی بدون نیاز به درخواست مجوزهای کاربر مرتبط با فضای ذخیرهسازی ببینند:
- فایلهای موجود در دایرکتوری مخصوص برنامه، با استفاده از
getExternalFilesDir()
قابل دسترسی هستند. - عکسها، ویدیوها و کلیپهای صوتی که برنامه از فروشگاه رسانه ایجاد کرده است.
برای کسب اطلاعات بیشتر در مورد فضای ذخیرهسازی با دامنه، و همچنین نحوه اشتراکگذاری، دسترسی و اصلاح فایلهایی که در دستگاههای ذخیرهسازی خارجی ذخیره میشوند، به راهنمای نحوه مدیریت فایلها در حافظه خارجی و دسترسی و اصلاح فایلهای رسانه مراجعه کنید.
دسترسی به مکان دستگاه در پسزمینه نیاز به مجوز دارد
برای پشتیبانی از کنترل اضافی که کاربران بر دسترسی برنامه به اطلاعات مکان دارند، Android 10 مجوز ACCESS_BACKGROUND_LOCATION
را معرفی می کند.
برخلاف مجوزهای ACCESS_FINE_LOCATION
و ACCESS_COARSE_LOCATION
، مجوز ACCESS_BACKGROUND_LOCATION
تنها زمانی که برنامه در پسزمینه اجرا میشود، بر دسترسی برنامه به مکان تأثیر میگذارد. برنامهای در نظر گرفته میشود که به موقعیت مکانی در پسزمینه دسترسی دارد، مگر اینکه یکی از شرایط زیر برآورده شود:
- یک فعالیت متعلق به برنامه قابل مشاهده است.
این برنامه یک سرویس پیش زمینه را اجرا می کند که نوع
location
سرویس پیش زمینه را اعلام کرده است.برای اعلام نوع سرویس پیش زمینه برای یک سرویس در برنامه خود،
targetSdkVersion
یاcompileSdkVersion
برنامه خود را روی29
یا بالاتر تنظیم کنید. درباره اینکه چگونه سرویسهای پیشزمینه میتوانند فعالیتهای آغاز شده توسط کاربر را که نیاز به دسترسی به مکان دارند، ادامه دهند، بیشتر بیاموزید.
اگر برنامه شما geofences ایجاد و نظارت می کند و Android 10 (سطح API 29) یا بالاتر را هدف قرار می دهد، باید مجوز ACCESS_BACKGROUND_LOCATION
را اعلام کنید.
هنگام هدف قرار دادن Android 9 یا پایینتر، دسترسی بهطور خودکار اعطا میشود
اگر برنامه شما روی Android 10 یا بالاتر اجرا میشود اما اندروید 9 (سطح API 28) یا پایینتر را هدف قرار میدهد، پلتفرم رفتار زیر را اعمال میکند:
- اگر برنامه شما عنصر
<uses-permission>
را برایACCESS_FINE_LOCATION
یاACCESS_COARSE_LOCATION
اعلام کند، سیستم به طور خودکار یک عنصر<uses-permission>
را برایACCESS_BACKGROUND_LOCATION
در حین نصب اضافه میکند. - اگر برنامه شما
ACCESS_FINE_LOCATION
یاACCESS_COARSE_LOCATION
را درخواست کند، سیستم به طور خودکارACCESS_BACKGROUND_LOCATION
را به درخواست اضافه میکند.
هنگامی که دستگاه به Android 10 ارتقا داده می شود، دسترسی داشته باشید
اگر کاربری به برنامه شما اجازه دسترسی به مکان دستگاه - یا ACCESS_COARSE_LOCATION
یا ACCESS_FINE_LOCATION
- بدهد، سپس دستگاه خود را از Android 9 به Android 10 ارتقا دهد، سیستم به طور خودکار مجموعه مجوزهای مبتنی بر مکان را که به برنامه شما اعطا شده است، بهروزرسانی میکند. مجموعه مجوزهایی که برنامه شما پس از ارتقا دریافت می کند به نسخه SDK هدف و مجوزهای تعریف شده آن بستگی دارد، همانطور که در جدول زیر نشان داده شده است:
جدول 1. تغییرات در وضعیت مجوز مکان پس از ارتقای دستگاه به Android 10
نسخه پلتفرم هدف | درشت یا ریز مجوز داده شده است؟ | مجوز پس زمینه در مانیفست تعریف شده است؟ | وضعیت مجوز پیش فرض به روز شد |
---|---|---|---|
اندروید 10 | بله | بله | دسترسی به پیش زمینه و پس زمینه |
اندروید 10 | بله | خیر | فقط دسترسی به پیش زمینه |
اندروید 10 | خیر | (توسط سیستم نادیده گرفته شد) | بدون دسترسی |
اندروید 9 یا پایین تر | بله | به صورت خودکار توسط سیستم در زمان ارتقاء دستگاه اضافه می شود | دسترسی به پیش زمینه و پس زمینه |
اندروید 9 یا پایین تر | خیر | (توسط سیستم نادیده گرفته شد) | بدون دسترسی |
توجه داشته باشید که کاربر میتواند این سطح دسترسی را حتی پس از بهروزرسانی خودکار دسترسی برنامه شما به مکان دستگاه توسط سیستم تغییر دهد. به عنوان مثال، کاربر ممکن است دسترسی برنامه شما را فقط به پیش زمینه کاهش دهد یا دسترسی را به طور کامل لغو کند. قبل از تلاش برای دسترسی به موقعیت مکانی دستگاه، به ویژه در یک سرویس پیش زمینه، برنامه شما باید بررسی کند که آیا کاربر همچنان به برنامه شما اجازه می دهد این اطلاعات مکان را دریافت کند یا خیر.
هنگام بهروزرسانی سطح API هدف در دستگاههای Android 10، دسترسی لغو شد
موردی را در نظر بگیرید که برنامه شما قبلاً روی دستگاهی نصب شده است که Android 10 را اجرا می کند. اگر در این شرایط برنامه خود را برای هدف قرار دادن Android 10 به روز کنید، دستگاه مجوز ACCESS_BACKGROUND_LOCATION
را لغو می کند.
برای اطلاعات بیشتر در مورد نحوه بازیابی موقعیت مکانی دستگاه در حالی که برنامه شما در پسزمینه است، به راهنمای دریافت بهروزرسانیهای مکان دورهای مراجعه کنید.
محدودیت در شروع فعالیت ها از پس زمینه
با شروع اندروید 10، این سیستم محدودیت هایی را برای شروع فعالیت ها از پس زمینه اعمال می کند. این تغییر رفتار به کاهش وقفهها برای کاربر کمک میکند و کاربر را کنترل بیشتری بر آنچه روی صفحه نمایش نشان داده میشود، حفظ میکند. تا زمانی که برنامه شما فعالیت های خود را در نتیجه مستقیم تعامل کاربر شروع می کند، برنامه شما به احتمال زیاد تحت تأثیر این محدودیت ها قرار نمی گیرد.
برای کسب اطلاعات بیشتر در مورد جایگزین توصیه شده برای شروع فعالیت ها از پس زمینه، به راهنمای نحوه هشدار به کاربران از رویدادهای حساس به زمان در برنامه خود مراجعه کنید.
شناسه ها و داده ها
این بخش تغییرات خاص مربوط به کار با شناسه ها و داده های دستگاه را فهرست می کند.
حذف وابستگی مخاطبین
با شروع اندروید 10، این پلتفرم اطلاعات وابستگی مخاطبین را ردیابی نمی کند. در نتیجه، اگر برنامه شما در مخاطبین کاربر جستجو کند، نتایج بر اساس فراوانی تعامل مرتب نمیشوند.
راهنمای مربوط به ContactsProvider
حاوی اطلاعیهای است که فیلدها و روشهای خاصی را توصیف میکند که در همه دستگاههای شروع شده در Android 10 منسوخ شدهاند .
تصادفی سازی آدرس MAC
در دستگاههایی که اندروید 10 یا بالاتر را اجرا میکنند، سیستم بهطور پیشفرض آدرسهای MAC را بهصورت تصادفی ارسال میکند.
اگر برنامه شما یک مورد استفاده سازمانی را مدیریت میکند، پلتفرم APIهایی را برای چندین عملیات مرتبط با آدرسهای MAC ارائه میکند:
- به دست آوردن آدرس MAC تصادفی: برنامههای مالک دستگاه و برنامههای مالک نمایه میتوانند با فراخوانی
getRandomizedMacAddress()
آدرس MAC تصادفی اختصاص داده شده به یک شبکه خاص را بازیابی کنند. - به دست آوردن آدرس MAC واقعی و کارخانه ای: برنامه های مالک دستگاه می توانند آدرس MAC سخت افزاری واقعی دستگاه را با فراخوانی
getWifiMacAddress()
بازیابی کنند. این روش برای ردیابی ناوگان دستگاه ها مفید است.
محدودیت دسترسی به فایل سیستم /proc/net
در دستگاههایی که Android 10 یا بالاتر را اجرا میکنند، برنامهها نمیتوانند به /proc/net
دسترسی داشته باشند که شامل اطلاعاتی درباره وضعیت شبکه دستگاه است. برنامه هایی که نیاز به دسترسی به این اطلاعات دارند، مانند VPN ها، باید از کلاس NetworkStatsManager
یا ConnectivityManager
استفاده کنند.
محدودیت در شناسههای دستگاه غیر قابل تنظیم مجدد
از Android 10، برنامهها باید مجوز ممتاز READ_PRIVILEGED_PHONE_STATE
را داشته باشند تا بتوانند به شناسههای غیرقابل تنظیم دستگاه، که شامل IMEI و شماره سریال هستند، دسترسی داشته باشند.
روش های تحت تأثیر شامل موارد زیر است:
-
Build
-
TelephonyManager
اگر برنامه شما مجوز ندارد و به هر حال سعی میکنید اطلاعاتی درباره شناسههای غیرقابل تنظیم مجدد بخواهید، پاسخ پلتفرم براساس نسخه SDK هدف متفاوت است:
- اگر برنامه شما Android 10 یا بالاتر را هدف قرار دهد، یک
SecurityException
رخ می دهد. - اگر برنامه شما Android 9 (سطح API 28) یا پایینتر را هدف قرار میدهد، اگر برنامه دارای مجوز
READ_PHONE_STATE
باشد، این روش دادههایnull
یا placeholder را برمیگرداند. در غیر این صورت، یکSecurityException
رخ می دهد.
بسیاری از موارد استفاده نیازی به شناسه دستگاه غیر قابل تنظیم مجدد ندارند. به عنوان مثال، اگر برنامه شما از شناسههای دستگاه غیر قابل تنظیم مجدد برای ردیابی تبلیغات یا اهداف تجزیه و تحلیل کاربر استفاده میکند، به جای آن از شناسه تبلیغات Android برای آن موارد استفاده خاص استفاده کنید . برای کسب اطلاعات بیشتر، بهترین روشها برای شناسههای منحصربهفرد را ببینید.
دسترسی محدود به داده های کلیپ بورد
اگر برنامه شما ویرایشگر روش ورودی پیشفرض (IME) نباشد یا برنامهای باشد که در حال حاضر فوکوس دارد، برنامه شما نمیتواند به دادههای کلیپبورد در Android 10 یا بالاتر دسترسی داشته باشد.
محافظت از شماره سریال دستگاه USB
اگر برنامه شما Android 10 یا بالاتر را هدف قرار می دهد، برنامه شما نمی تواند شماره سریال را بخواند تا زمانی که کاربر به برنامه شما اجازه دسترسی به دستگاه یا لوازم جانبی USB را بدهد.
برای کسب اطلاعات بیشتر در مورد کار با دستگاههای USB، راهنمای نحوه پیکربندی میزبانهای USB را ببینید.
دوربین و قابلیت اتصال
در این بخش تغییرات مختص متادیتا دوربین و APIهای اتصال فهرست می شود.
محدودیت دسترسی به جزئیات و ابرداده دوربین
اندروید 10 وسعت اطلاعاتی را که متد getCameraCharacteristics()
به طور پیش فرض برمی گرداند تغییر می دهد. بهویژه، برنامه شما باید مجوز CAMERA
را داشته باشد تا بتواند به ابردادههای بالقوه خاص دستگاه که در مقدار برگشتی این روش گنجانده شده است، دسترسی داشته باشد.
برای کسب اطلاعات بیشتر در مورد این تغییرات، به بخش مربوط به فیلدهای دوربینی که به مجوز نیاز دارند مراجعه کنید.
محدودیت در فعال و غیرفعال کردن وای فای
برنامههایی که Android 10 یا بالاتر را هدف قرار میدهند، نمیتوانند Wi-Fi را فعال یا غیرفعال کنند. متد WifiManager.setWifiEnabled()
همیشه false
را برمی گرداند.
اگر باید از کاربران بخواهید که Wi-Fi را فعال و غیرفعال کنند، از پانل تنظیمات استفاده کنید.
محدودیت در دسترسی مستقیم به شبکه های Wi-Fi پیکربندی شده
برای محافظت از حریم خصوصی کاربر، پیکربندی دستی فهرست شبکههای Wi-Fi به برنامههای سیستم و کنترلکنندههای خطمشی دستگاه (DPC) محدود میشود. یک DPC معین می تواند مالک دستگاه یا مالک نمایه باشد.
اگر برنامه شما اندروید 10 یا بالاتر را هدف قرار میدهد و یک برنامه سیستمی یا DPC نیست، روشهای زیر اطلاعات مفیدی را بر نمیگردانند:
متد
getConfiguredNetworks()
همیشه یک لیست خالی برمی گرداند.هر روش عملیات شبکه که یک مقدار صحیح
addNetwork()
وupdateNetwork()
- برمی گرداند - همیشه -1 را برمی گرداند.هر عملیات شبکه که یک مقدار بولی برمیگرداند
removeNetwork()
،reassociate()
،enableNetwork()
،disableNetwork()
،reconnect()
وdisconnect()
— همیشهfalse
برمیگرداند.
اگر برنامه شما نیاز به اتصال به شبکه های Wi-Fi دارد، از روش های جایگزین زیر استفاده کنید:
- برای راه اندازی یک اتصال محلی فوری به یک شبکه Wi-Fi، از
WifiNetworkSpecifier
در یک شیءNetworkRequest
استاندارد استفاده کنید. - برای افزودن شبکههای Wi-Fi برای در نظر گرفتن دسترسی به اینترنت برای کاربر، با اشیاء
WifiNetworkSuggestion
کار کنید. با فراخوانیaddNetworkSuggestions()
وremoveNetworkSuggestions()
میتوانید شبکههایی را که در گفتگوی انتخاب شبکه اتصال خودکار ظاهر میشوند اضافه و حذف کنید. این روش ها به هیچ مجوز مکان نیاز ندارند.
برخی از APIهای تلفن، بلوتوث، وای فای به مجوز مکان FINE نیاز دارند
اگر برنامه شما Android 10 یا بالاتر را هدف قرار میدهد، باید مجوز ACCESS_FINE_LOCATION
را داشته باشد تا بتواند از چندین روش در APIهای Wi-Fi، Wi-Fi Aware یا بلوتوث استفاده کند. بخشهای زیر کلاسها و متدهای آسیبدیده را فهرست میکنند.
تلفن
-
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()
-
مجوزها
این بخش بهروزرسانیهای مدل مجوزهای Android را توضیح میدهد.
دسترسی محدود به محتویات صفحه نمایش
برای محافظت از محتویات صفحه کاربران، Android 10 با تغییر دامنه مجوزهای READ_FRAME_BUFFER
، CAPTURE_VIDEO_OUTPUT
، و CAPTURE_SECURE_VIDEO_OUTPUT
از دسترسی بی صدا به محتویات صفحه دستگاه جلوگیری می کند. از اندروید 10، این مجوزها فقط برای دسترسی به امضا هستند.
برنامههایی که نیاز به دسترسی به محتویات صفحهنمایش دستگاه دارند باید از MediaProjection
API استفاده کنند، که درخواستی از کاربر برای ارائه رضایت نمایش داده میشود.
بررسی مجوزهای کاربر در برنامه های قدیمی
اگر برنامه شما Android 5.1 (سطح API 22) یا پایینتر را هدف قرار میدهد، کاربران هنگام استفاده از برنامه شما در دستگاهی که برای اولین بار دارای Android 10 یا بالاتر است، صفحه مجوزها را مشاهده میکنند، همانطور که در شکل 1 نشان داده شده است. این صفحه به کاربران این فرصت را میدهد تا دسترسی به مجوزهایی را که سیستم قبلاً در زمان نصب به برنامه شما داده بود لغو کنید.
تشخیص فعالیت بدنی
Android 10 مجوز زمان اجرا android.permission.ACTIVITY_RECOGNITION
را برای برنامههایی که نیاز به شناسایی تعداد قدمهای کاربر یا طبقهبندی فعالیت بدنی کاربر، مانند پیادهروی، دوچرخهسواری، یا حرکت در وسیله نقلیه دارند، معرفی میکند. این طراحی شده است تا به کاربران نحوه استفاده از دادههای حسگر دستگاه در تنظیمات را مشاهده کنند.
برخی از کتابخانههای موجود در سرویسهای Google Play، مانند Activity Recognition API و Google Fit API ، نتایجی را ارائه نمیدهند مگر اینکه کاربر این مجوز را به برنامه شما داده باشد.
تنها حسگرهای داخلی دستگاه که به شما نیاز به اعلام این مجوز دارند، سنسورهای گام شمار و ردیاب گام هستند.
اگر برنامه شما Android 9 (سطح API 28) یا پایینتر را هدف قرار میدهد، سیستم به طور خودکار مجوز android.permission.ACTIVITY_RECOGNITION
را در صورت نیاز به برنامه شما اعطا میکند، اگر برنامه شما هر یک از شرایط زیر را داشته باشد:
- فایل مانیفست شامل مجوز
com.google.android.gms.permission.ACTIVITY_RECOGNITION
است. - فایل مانیفست شامل مجوز
android.permission.ACTIVITY_RECOGNITION
نیست .
اگر system-auto مجوز android.permission.ACTIVITY_RECOGNITION
را اعطا کند، پس از اینکه برنامه خود را برای هدف قرار دادن Android 10 بهروزرسانی کردید، برنامه شما این مجوز را حفظ میکند. با این حال، کاربر میتواند هر زمان که بخواهد در تنظیمات سیستم این مجوز را لغو کند.
گروههای مجوز از رابط کاربری حذف شدند
از اندروید 10، برنامهها نمیتوانند نحوه گروهبندی مجوزها را در رابط کاربری جستجو کنند.