مانند نسخه های قبلی، Android 13 شامل تغییرات رفتاری است که ممکن است بر برنامه شما تأثیر بگذارد. تغییرات رفتاری زیر منحصراً برای برنامههایی اعمال میشود که Android 13 یا بالاتر را هدف قرار میدهند. اگر برنامه شما Android 13 یا بالاتر را هدف قرار می دهد، باید برنامه خود را طوری تغییر دهید که در صورت لزوم از این رفتارها به درستی پشتیبانی کند.
حتماً فهرستی از تغییرات رفتاری را که بر همه برنامههای اجرا شده در Android 13 تأثیر میگذارد، مرور کنید.
حریم خصوصی
مجوز اعلان بر ظاهر سرویس پیش زمینه تأثیر می گذارد
اگر کاربر مجوز اعلان را رد کند، اعلان های مربوط به خدمات پیش زمینه را در کشوی اعلان نمی بیند. با این حال، کاربران همچنان اعلانهای مربوط به خدمات پیشزمینه را در Task Manager مشاهده میکنند، صرف نظر از اینکه آیا مجوز اعلان داده شده است یا خیر.
مجوز زمان اجرا جدید برای دستگاه های Wi-Fi اطراف
در نسخههای قبلی Android، کاربر باید مجوز ACCESS_FINE_LOCATION
را برای تکمیل چندین مورد رایج استفاده از Wi-Fi به برنامه شما بدهد.
از آنجایی که برای کاربران دشوار است که مجوزهای مکان را با عملکرد Wi-Fi مرتبط کنند، Android 13 (سطح API 33) مجوز زمان اجرا را در گروه مجوز NEARBY_DEVICES
برای برنامههایی که اتصالات دستگاه را به نقاط دسترسی نزدیک از طریق Wi-Fi مدیریت میکنند، معرفی میکند. این مجوز، NEARBY_WIFI_DEVICES
، موارد استفاده از Wi-Fi مانند موارد زیر را برآورده می کند:
- دستگاههای نزدیک را پیدا کنید یا به آنها متصل شوید، مانند چاپگرها یا دستگاههای ارسال رسانه. این گردش کار به برنامه شما اجازه می دهد تا این نوع کارها را انجام دهد:
- دریافت اطلاعات AP خارج از باند، مانند از طریق BLE.
- دستگاهها را از طریق Wi-Fi Aware کشف کرده و به آنها متصل شوید و با استفاده از نقطه اتصال محلی فقط به آن متصل شوید.
- دستگاه ها را از طریق Wi-Fi Direct کشف کرده و به آنها متصل شوید.
- اتصال به یک SSID شناخته شده، مانند ماشین یا دستگاه خانه هوشمند را آغاز کنید.
- یک کانون محلی فقط راه اندازی کنید.
- محدوده به دستگاه های Wi-Fi Aware نزدیک.
تا زمانی که برنامه شما اطلاعات مکان فیزیکی را از APIهای Wi-Fi دریافت نمی کند، زمانی که Android نسخه 13 یا بالاتر را هدف قرار می دهید و از APIهای Wi-Fi استفاده می کنید، به جای ACCESS_FINE_LOCATION
NEARBY_WIFI_DEVICES
درخواست کنید. وقتی مجوز NEARBY_WIFI_DEVICES
را اعلام میکنید، قویاً اعلام کنید که برنامه شما هرگز اطلاعات مکان فیزیکی را از APIهای Wi-Fi دریافت نمیکند. برای انجام این کار، ویژگی android:usesPermissionFlags
روی neverForLocation
تنظیم کنید. این فرآیند مشابه کاری است که در Android 12 (سطح API 31) و بالاتر انجام میدهید، وقتی ادعا میکنید که اطلاعات دستگاه بلوتوث هرگز برای مکان استفاده نمیشود .
درباره نحوه درخواست مجوز برای دسترسی به دستگاههای Wi-Fi اطراف بیشتر بیاموزید.
مجوزهای رسانه گرانول
اگر برنامه شما Android 13 یا بالاتر را هدف قرار میدهد و باید به فایلهای رسانهای که سایر برنامهها ایجاد کردهاند دسترسی داشته باشد ، باید بهجای مجوز READ_EXTERNAL_STORAGE
یک یا چند مورد از مجوزهای رسانه اصلی زیر را درخواست کنید:
نوع رسانه | اجازه درخواست |
---|---|
تصاویر و عکسها | READ_MEDIA_IMAGES |
ویدیوها | READ_MEDIA_VIDEO |
فایل های صوتی | READ_MEDIA_AUDIO |
قبل از اینکه به فایل های رسانه ای برنامه دیگری دسترسی پیدا کنید، بررسی کنید که کاربر مجوزهای رسانه ای دقیق را به برنامه شما اعطا کرده باشد.
شکل 1 برنامه ای را نشان می دهد که مجوز READ_MEDIA_AUDIO
را درخواست می کند.
اگر مجوز READ_MEDIA_IMAGES
و مجوز READ_MEDIA_VIDEO
را همزمان درخواست کنید، تنها یک گفتگوی مجوز سیستم ظاهر می شود.
اگر قبلاً مجوز READ_EXTERNAL_STORAGE
به برنامه شما اعطا شده بود، هر گونه مجوز درخواستی READ_MEDIA_*
هنگام ارتقا به طور خودکار اعطا میشود. برای بررسی مجوزهای ارتقا یافته می توانید از دستور ADB زیر استفاده کنید:
adb shell cmd appops get --uid PACKAGE_NAME
استفاده از حسگرهای بدن در پسزمینه به مجوز جدید نیاز دارد
اندروید 13 مفهوم دسترسی "در حین استفاده" را برای حسگرهای بدن مانند ضربان قلب، دما و درصد اکسیژن خون معرفی می کند. این مدل دسترسی بسیار شبیه به مدلی است که سیستم برای مکان یابی در اندروید 10 (سطح API 29) معرفی کرده است.
اگر برنامه شما Android 13 را هدف قرار میدهد و هنگام اجرا در پسزمینه نیاز به دسترسی به اطلاعات حسگر بدن دارد، باید مجوز BODY_SENSORS_BACKGROUND
جدید را علاوه بر مجوز BODY_SENSORS
موجود اعلام کنید.
عملکرد و باتری
استفاده از منابع باتری
اگر کاربر برنامه شما را برای استفاده از باتری پسزمینه در حالت «محدود» قرار دهد در حالی که برنامه شما Android 13 را هدف قرار میدهد، سیستم پخش BOOT_COMPLETED
یا پخش LOCKED_BOOT_COMPLETED
را تا زمانی که برنامه به دلایل دیگر راهاندازی نشود، ارائه نمیکند.
تجربه کاربری
کنترل های رسانه برگرفته از PlaybackState
برای برنامههایی که Android 13 (سطح API 33) و بالاتر را هدف قرار میدهند، سیستم کنترلهای رسانه را از اقدامات PlaybackState
دریافت میکند. این به سیستم اجازه میدهد مجموعهای از کنترلهای غنیتر را نشان دهد که از نظر فنی بین تلفنها و دستگاههای تبلت سازگار است، و همچنین با نحوه نمایش کنترلهای رسانه در دیگر پلتفرمهای Android مانند Android Auto و Android TV همسو میشود.
شکل 2 نمونه ای از نحوه ظاهر این دستگاه را به ترتیب در تلفن و تبلت نشان می دهد.
قبل از Android 13، سیستم حداکثر پنج عملکرد را از اعلان MediaStyle
به ترتیب اضافه شدن نمایش می داد. در حالت فشرده - به عنوان مثال، در تنظیمات سریع جمع شده - حداکثر سه عملکرد مشخص شده با setShowActionsInCompactView()
نشان داده شد.
با شروع Android 13، سیستم حداکثر پنج دکمه عمل را بر اساس PlaybackState
همانطور که در جدول زیر توضیح داده شده است، نمایش می دهد. در حالت فشرده، فقط سه اسلات عمل اول نمایش داده می شود. برای برنامههایی که Android 13 را هدف قرار نمیدهند یا برنامههایی که شامل PlaybackState
نیستند، سیستم کنترلها را بر اساس فهرست Action
اضافه شده به اعلان MediaStyle
همانطور که در پاراگراف قبلی توضیح داده شد، نمایش میدهد.
اسلات | اقدام | معیارها |
---|---|---|
1 | بازی کنید | وضعیت فعلی PlaybackState یکی از موارد زیر است:
|
در حال بارگیری اسپینر | وضعیت فعلی PlaybackState یکی از موارد زیر است:
| |
مکث کنید | وضعیت فعلی PlaybackState هیچ یک از موارد فوق نیست. | |
2 | قبلی | اقدامات PlaybackState شامل ACTION_SKIP_TO_PREVIOUS است. |
سفارشی | کنشهای PlaybackState شامل ACTION_SKIP_TO_PREVIOUS نیستند و کنشهای سفارشی PlaybackState شامل یک کنش سفارشی است که هنوز قرار داده نشده است. | |
خالی | موارد اضافی PlaybackState شامل یک مقدار بولی true برای کلید SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV است. | |
3 | بعدی | اقدامات PlaybackState شامل ACTION_SKIP_TO_NEXT است. |
سفارشی | کنشهای PlaybackState شامل ACTION_SKIP_TO_NEXT نمیشوند و کنشهای سفارشی PlaybackState شامل یک کنش سفارشی است که هنوز قرار داده نشده است. | |
خالی | موارد اضافی PlaybackState شامل یک مقدار بولی true برای کلید SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT است. | |
4 | سفارشی | کنشهای سفارشی PlaybackState شامل یک کنش سفارشی است که هنوز قرار داده نشده است. |
5 | سفارشی | کنشهای سفارشی PlaybackState شامل یک کنش سفارشی است که هنوز قرار داده نشده است. |
اقدامات سفارشی به ترتیبی که به PlaybackState
اضافه شده اند قرار می گیرند.
تم رنگی برنامه به طور خودکار در محتوای WebView اعمال می شود
برای برنامههایی که Android 13 (سطح API 33) یا بالاتر را هدف قرار میدهند، متد setForceDark()
منسوخ شده است و در صورت فراخوانی متد، No-op ایجاد میشود.
درعوض، اکنون WebView همیشه درخواست رسانه prefers-color-scheme
با توجه به ویژگی تم برنامه، isLightTheme
، تنظیم میکند. به عبارت دیگر، اگر isLightTheme
true
باشد یا مشخص نشده باشد، prefers-color-scheme
light
است. وگرنه dark
این رفتار به این معنی است که سبک روشن یا تیره محتوای وب به طور خودکار اعمال می شود تا در صورت پشتیبانی محتوا با موضوع برنامه مطابقت داشته باشد.
برای اکثر برنامهها، رفتار جدید باید سبکهای برنامه مناسب را بهطور خودکار اعمال کند، با این حال باید برنامه خود را برای بررسی مواردی که ممکن است تنظیمات حالت تاریک را به صورت دستی کنترل کردهاید، آزمایش کنید.
اگر هنوز باید رفتار تم رنگی برنامه خود را سفارشی کنید، به جای آن از متد setAlgorithmicDarkeningAllowed()
استفاده کنید. برای سازگاری با نسخه های قبلی اندروید، توصیه می کنیم از روش معادل setAlgorithmicDarkeningAllowed()
در AndroidX استفاده کنید.
مستندات مربوط به آن روش را ببینید تا بیشتر بدانید که بسته به تنظیمات targetSdkVersion
و طرح زمینه برنامه خود، چه رفتاری را می توانید در برنامه خود انتظار داشته باشید.
قابلیت اتصال
BluetoothAdapter#enable() و BluetoothAdapter#disable() منسوخ شدند
برای برنامههایی که Android 13 (سطح API 33) یا بالاتر را هدف قرار میدهند، روشهای BluetoothAdapter#enable()
و BluetoothAdapter#disable()
منسوخ شدهاند و همیشه false
را برمیگردانند.
انواع برنامه های زیر از این تغییرات مستثنی هستند:
- برنامه های صاحب دستگاه
- برنامه های مالک پروفایل
- برنامه های سیستمی
خدمات گوگل پلی
مجوز لازم برای شناسه تبلیغاتی
برنامههایی که از شناسه تبلیغاتی خدمات Google Play استفاده میکنند و Android 13 (سطح API 33) و بالاتر را هدف قرار میدهند، باید مجوز عادی AD_ID
در فایل مانیفست برنامهشان به شرح زیر اعلام کنند:
<manifest ...>
<!-- Required only if your app targets Android 13 or higher. -->
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
<application ...>
...
</application>
</manifest>
اگر برنامه شما این مجوز را هنگام هدف قرار دادن Android 13 یا بالاتر اعلام نکند، شناسه تبلیغاتی به طور خودکار حذف می شود و با یک رشته صفر جایگزین می شود.
اگر برنامه شما از SDKهایی استفاده میکند که مجوز AD_ID
را در مانیفست کتابخانه اعلام میکنند، این مجوز بهطور پیشفرض با فایل مانیفست برنامه شما ادغام میشود. در این حالت، نیازی به اعلام مجوز در manfiest فایل برنامه خود ندارید.
برای کسب اطلاعات بیشتر، به شناسه تبلیغات در راهنمای کنسول Play مراجعه کنید.
محدودیتهای غیر SDK بهروزرسانی شد
Android 13 شامل لیست های به روز شده از رابط های غیر SDK محدود شده بر اساس همکاری با توسعه دهندگان اندروید و آخرین آزمایش داخلی است. در صورت امکان، قبل از اینکه رابطهای غیر SDK را محدود کنیم، مطمئن میشویم که جایگزینهای عمومی در دسترس هستند.
اگر برنامه شما اندروید 13 را هدف قرار نمی دهد، ممکن است برخی از این تغییرات فوراً روی شما تأثیر نگذارند. با این حال، در حالی که در حال حاضر میتوانید از برخی رابطهای غیر SDK ( بسته به سطح API هدف برنامهتان ) استفاده کنید، استفاده از هر روش یا فیلد غیر SDK همیشه خطر شکستن برنامه شما را بالا میبرد.
اگر مطمئن نیستید که برنامه شما از رابط های غیر SDK استفاده می کند، می توانید برنامه خود را آزمایش کنید تا متوجه شوید. اگر برنامه شما به رابطهای غیر SDK متکی است، باید برنامهریزی برای انتقال به جایگزینهای SDK را شروع کنید. با این وجود، میدانیم که برخی از برنامهها دارای موارد استفاده معتبر برای استفاده از رابطهای غیر SDK هستند. اگر نمی توانید جایگزینی برای استفاده از یک رابط غیر SDK برای یک ویژگی در برنامه خود پیدا کنید، باید یک API عمومی جدید درخواست کنید .
برای کسب اطلاعات بیشتر در مورد تغییرات این نسخه از اندروید، بهروزرسانیهای محدودیتهای رابط غیر SDK در Android 13 را ببینید. برای کسب اطلاعات بیشتر در مورد رابط های غیر SDK به طور کلی، به محدودیت ها در رابط های غیر SDK مراجعه کنید.