مانند نسخه های قبلی، اندروید 16 شامل تغییرات رفتاری است که ممکن است بر برنامه شما تأثیر بگذارد. تغییرات رفتاری زیر منحصراً برای برنامههایی اعمال میشود که اندروید 16 یا بالاتر را هدف قرار میدهند. اگر برنامه شما اندروید 16 یا بالاتر را هدف قرار می دهد، باید برنامه خود را تغییر دهید تا در صورت لزوم از این رفتارها پشتیبانی کند.
حتماً فهرستی از تغییرات رفتاری را نیز مرور کنید که بر همه برنامههای در حال اجرا در Android 16 بدون توجه به targetSdkVersion
برنامه شما تأثیر میگذارد.
تجربه کاربری و رابط کاربری سیستم
اندروید 16 شامل تغییرات زیر است که برای ایجاد یک تجربه کاربری سازگارتر و بصری در نظر گرفته شده است.
انصراف لبه به لبه حذف می شود
Android 15 برای برنامههایی که Android 15 را هدف قرار میدهند (سطح API 35) لبه به لبه اعمال میشود ، اما برنامه شما میتواند با تنظیم R.attr#windowOptOutEdgeToEdgeEnforcement
روی true
انصراف دهد. برای برنامههایی که Android 16 را هدف قرار میدهند، R.attr#windowOptOutEdgeToEdgeEnforcement
منسوخ و غیرفعال شده است، و برنامه شما نمیتواند از رفتن لبه به لبه انصراف دهد.
برای آزمایش در Android 16 Beta 2، مطمئن شوید که برنامه شما از لبه به لبه پشتیبانی میکند و هرگونه استفاده از R.attr#windowOptOutEdgeToEdgeEnforcement
را حذف کنید. برای پشتیبانی از لبه به لبه، به راهنمای نوشتن و مشاهده مراجعه کنید. در مورد نگرانی های موجود در ردیاب مشکل ما در صفحه بازخورد به ما اطلاع دهید.
مهاجرت یا انصراف برای بازگشت پیشبینی لازم است
برای برنامههایی که Android 16 یا بالاتر را هدف قرار میدهند و روی دستگاه Android 16 یا بالاتر اجرا میشوند، انیمیشنهای پیشبینی کننده سیستم برگشت (بازگشت به خانه، کار متقابل و فعالیت متقابل) به طور پیشفرض فعال هستند. علاوه بر این، onBackPressed
فراخوانی نمی شود و KeyEvent.KEYCODE_BACK
دیگر ارسال نمی شود.
اگر برنامهتان رویداد برگشتی را متوقف کرد و هنوز به حالت پیشبینی منتقل نشدهاید، برنامهتان را بهروزرسانی کنید تا از APIهای پیمایش برگشتی پشتیبانیشده استفاده کند . یا با تنظیم ویژگی android:enableOnBackInvokedCallback
روی false
در تگ <application>
یا <activity>
فایل AndroidManifest.xml
برنامه خود، موقتاً انصراف دهید.
APIهای فونت زیبا منسوخ و غیرفعال شدند
برنامههایی که Android 15 را هدف قرار میدهند (سطح API 35) دارای ویژگی elegantTextHeight
TextView
بهطور پیشفرض روی true
تنظیم شدهاند و فونت فشرده را با فونتی که بسیار خواناتر است جایگزین میکند. میتوانید با تنظیم ویژگی elegantTextHeight
روی false
این مورد را لغو کنید.
Android 16 ویژگی elegantTextHeight
را منسوخ میکند، و زمانی که برنامه شما Android 16 را هدف قرار دهد، این ویژگی نادیده گرفته میشود. «فونتهای UI» که توسط این APIها کنترل میشوند، متوقف میشوند، بنابراین باید هر گونه طرحبندی را برای اطمینان از ارائه متن ثابت و ثابت در آینده به زبانهای عربی، لائوس، میانمار، تامیل، گجراتی، مالزی، تایلندی، تلهآلو، کانا تطبیق دهید.
![](https://developer.android.google.cn/static/about/versions/15/images/elegant-text-height-before.png?authuser=1&hl=fa)
elegantTextHeight
برای برنامههایی که Android 14 (سطح API 34) و پایینتر را هدف قرار میدهند، یا برای برنامههایی که Android 15 را هدف قرار میدهند (سطح API 35) که با تنظیم ویژگی elegantTextHeight
روی false
پیشفرض را لغو میکنند. ![](https://developer.android.google.cn/static/about/versions/15/images/elegant-text-height-after.png?authuser=1&hl=fa)
elegantTextHeight
برای برنامههایی که Android 16 را هدف قرار میدهند، یا برای برنامههایی که Android 15 را هدف قرار میدهند (سطح API 35) که با تنظیم ویژگی elegantTextHeight
روی false
پیشفرض را لغو نکردهاند.عملکرد اصلی
اندروید 16 شامل تغییرات زیر است که قابلیتهای اصلی سیستم اندروید را تغییر داده یا گسترش میدهد.
بهینه سازی زمان بندی کار با نرخ ثابت
قبل از هدف قرار دادن اندروید 16، زمانی که scheduleAtFixedRate
اجرای یک کار را به دلیل خارج از چرخه حیات فرآیند معتبر از دست داد، همه اجراهای از دست رفته بلافاصله با بازگشت برنامه به چرخه حیات معتبر اجرا می شوند.
هنگام هدف قرار دادن Android 16، حداکثر یک اجرای از دست رفته scheduleAtFixedRate
بلافاصله پس از بازگشت برنامه به چرخه حیات معتبر اجرا می شود. انتظار می رود این تغییر رفتار باعث بهبود عملکرد برنامه شود. این رفتار را در برنامه خود آزمایش کنید تا بررسی کنید آیا برنامه شما تحت تأثیر قرار گرفته است یا خیر. همچنین میتوانید با استفاده از چارچوب سازگاری برنامه و فعال کردن پرچم سازگار STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS
آزمایش کنید.
صفحه نمایش های بزرگ و عوامل شکل
Android 16 شامل تغییرات زیر برای برنامهها هنگام نمایش در دستگاههای صفحه بزرگ است.
طرح بندی های تطبیقی
با توجه به اینکه اکنون برنامههای اندروید بر روی دستگاههای مختلف (مانند تلفنها، تبلتها، تاشوها و دسکتاپها) و حالتهای پنجرهسازی روی صفحههای بزرگ (مانند پنجرههای تقسیمشده و دسکتاپ) اجرا میشوند، توسعهدهندگان باید برنامههای اندرویدی بسازند که با هر اندازه صفحه و پنجره سازگار باشد، صرف نظر از جهتگیری دستگاه. پارادایم هایی مانند محدود کردن جهت گیری و تغییر اندازه در دنیای چند دستگاهی امروزی بسیار محدود کننده هستند.
جهت گیری، قابلیت تغییر اندازه و محدودیت های نسبت تصویر را نادیده بگیرید
برای برنامههایی که Android 16 را هدف قرار میدهند، Android 16 شامل تغییراتی در نحوه مدیریت سیستم جهتگیری، قابلیت تغییر اندازه و محدودیتهای نسبت ابعاد است. در نمایشگرهایی با کمترین عرض >= 600dp، محدودیت ها دیگر اعمال نمی شوند. برنامهها همچنین کل پنجره نمایشگر را بدون توجه به نسبت ابعاد یا جهتگیری ترجیحی کاربر پر میکنند و از ستونباکسینگ استفاده نمیشود.
این تغییر رفتار پلت فرم استاندارد جدیدی را معرفی می کند. اندروید در حال حرکت به سمت مدلی است که انتظار می رود برنامه ها با جهت گیری ها، اندازه های نمایشگر و نسبت های مختلف سازگار شوند. محدودیتهایی مانند جهتگیری ثابت یا قابلیت تغییر اندازه محدود، مانع از سازگاری برنامه میشوند، بنابراین توصیه میکنیم برنامه خود را برای ارائه بهترین تجربه ممکن برای کاربر سازگار کنید .
همچنین میتوانید این رفتار را با استفاده از [app compatibility frame][a16-kilo-14] و فعال کردن پرچم سازگار UNIVERSAL_RESIZABLE_BY_DEFAULT
آزمایش کنید.
تغییرات متداول شکستن
نادیده گرفتن محدودیتهای جهت، قابلیت تغییر اندازه و نسبت ابعاد ممکن است بر رابط کاربری برنامه شما در برخی از دستگاهها تأثیر بگذارد، بهویژه عناصری که برای طرحبندیهای کوچک قفلشده در جهت عمودی طراحی شدهاند: برای مثال، مسائلی مانند طرحبندیهای کشیده و انیمیشنها و اجزای خارج از صفحه. هر گونه فرضی در مورد نسبت تصویر یا جهتگیری میتواند باعث ایجاد مشکلات بصری در برنامه شما شود. درباره نحوه اجتناب از آنها و بهبود رفتار تطبیقی برنامه خود بیشتر بیاموزید .
اجازه چرخش دستگاه منجر به ایجاد مجدد فعالیت بیشتر می شود که در صورت عدم حفظ صحیح می تواند منجر به از دست دادن حالت کاربر شود. نحوه ذخیره صحیح حالت رابط کاربری را در حالت های ذخیره رابط کاربری بیاموزید.
جزئیات پیاده سازی
ویژگی های مانیفست زیر و API های زمان اجرا در دستگاه های صفحه بزرگ در حالت تمام صفحه و چند پنجره نادیده گرفته می شوند:
-
screenOrientation
-
resizableActivity
-
minAspectRatio
-
maxAspectRatio
-
setRequestedOrientation()
-
getRequestedOrientation()
مقادیر زیر برای screenOrientation
، setRequestedOrientation()
و getRequestedOrientation()
نادیده گرفته می شوند:
-
portrait
-
reversePortrait
-
sensorPortrait
-
userPortrait
-
landscape
-
reverseLandscape
-
sensorLandscape
-
userLandscape
با توجه به قابلیت تغییر اندازه نمایشگر، android:resizeableActivity="false"
، android:minAspectRatio
و android:maxAspectRatio
هیچ تاثیری ندارند.
برای برنامههایی که Android 16 را هدف قرار میدهند، محدودیتهای جهتگیری برنامه، قابلیت تغییر اندازه و نسبت ابعاد بهطور پیشفرض در صفحههای بزرگ نادیده گرفته میشوند، اما هر برنامهای که کاملاً آماده نیست میتواند با انصراف موقتاً این رفتار را لغو کند (که منجر به رفتار قبلی یعنی قرار گرفتن در حالت سازگاری میشود).
استثنائات
محدودیتهای جهتگیری، قابلیت تغییر اندازه و نسبت تصویر Android 16 در شرایط زیر اعمال نمیشوند:
- بازی ها (بر اساس پرچم
android:appCategory
) - کاربران به صراحت از رفتار پیشفرض برنامه در تنظیمات نسبت تصویر دستگاه استفاده میکنند
- صفحه نمایش هایی که کوچکتر از
sw600dp
هستند
به طور موقت انصراف دهید
برای انصراف از یک فعالیت خاص، ویژگی PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY
مانیفست را اعلام کنید:
<activity ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
...
</activity>
اگر بخشهای زیادی از برنامه شما برای Android 16 آماده نیست، میتوانید با اعمال همان ویژگی در سطح برنامه، به طور کامل انصراف دهید:
<application ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
</application>
سلامتی و تناسب اندام
اندروید 16 شامل تغییرات زیر مربوط به داده های سلامتی و تناسب اندام است.
مجوزهای سلامت و تناسب اندام
برای برنامههایی که Android 16 یا بالاتر را هدف قرار میدهند، مجوزهای BODY_SENSORS
در حال انتقال به مجوزهای جزئی در android.permissions.health
هستند که توسط Health Connect نیز استفاده میشود. هر API که قبلاً به BODY_SENSORS
یا BODY_SENSORS_BACKGROUND
نیاز داشت، اکنون به مجوز android.permissions.health
مربوطه نیاز دارد. این بر انواع دادهها، APIها و انواع خدمات پیشزمینه زیر تأثیر میگذارد:
-
HEART_RATE_BPM
از Wear Health Services -
Sensor.TYPE_HEART_RATE
از Android Sensor Manager -
heartRateAccuracy
وheartRateBpm
از WearProtoLayout
-
FOREGROUND_SERVICE_TYPE_HEALTH
که در آن مجوزandroid.permission.health
مربوطه به جایBODY_SENSORS
مورد نیاز است
اگر برنامه شما از این APIها استفاده می کند، اکنون باید مجوزهای گرانول مربوطه را درخواست کند:
- برای نظارت بر ضربان قلب، SpO2 یا دمای پوست در حین استفاده: به جای
BODY_SENSORS
مجوز دانهبندی را درandroid.permissions.health
درخواست کنید، مانندREAD_HEART_RATE
. - برای دسترسی به حسگر پسزمینه: به جای
BODY_SENSORS_BACKGROUND
READ_HEALTH_DATA_IN_BACKGROUND
درخواست کنید.
این مجوزها همان مجوزهایی هستند که از دسترسی به دادههای خواندن از Health Connect ، ذخیرهگاه داده Android برای دادههای سلامتی، تناسب اندام و سلامتی محافظت میکنند.