تغییرات رفتاری: برنامه‌هایی که Android 13 یا بالاتر را هدف قرار می‌دهند

مانند نسخه‌های قبلی، Android 13 شامل تغییرات رفتاری است که ممکن است بر برنامه شما تأثیر بگذارد. تغییرات رفتاری زیر منحصراً برای برنامه‌هایی اعمال می‌شود که Android 13 یا بالاتر را هدف قرار می‌دهند. اگر برنامه‌تان Android نسخه ۱۳ یا بالاتر را هدف قرار می‌دهد، باید برنامه‌تان را اصلاح کنید تا درصورت لزوم از این رفتارها به‌درستی پشتیبانی کند.

حتماً فهرست تغییرات رفتاری را که بر همه برنامه‌های درحال اجرا در Android 13 تأثیر می‌گذارد نیز مرور کنید.

حریم خصوصی

اجازه اعلان بر ظاهر سرویس پیش‌زمینه‌ای تأثیر می‌گذارد

اگر کاربر اجازه اعلان را رد کند، اعلان‌های مربوط به سرویس‌های پیش‌زمینه‌ای را در کشوی اعلان نمی‌بیند. بااین‌حال، کاربران همچنان اعلان‌های مربوط به سرویس‌های پیش‌زمینه‌ای را در مدیر وظیفه می‌بینند، صرف‌نظر از اینکه اجازه اعلان اعطا شده باشد یا نه.

اجازه زمان اجرای جدید برای دستگاه‌های Wi-Fi اطراف

در نسخه‌های قبلی Android، کاربر باید به برنامه شما اجازه ACCESS_FINE_LOCATION بدهد تا چندین مورد استفاده رایج از Wi-Fi را تکمیل کند.

ازآنجایی‌که برای کاربران دشوار است که اجازه‌های مکان را با عملکرد Wi-Fi مرتبط کنند، Android 13 (سطح میانای برنامه‌سازی کاربردی ۳۳) اجازه زمان اجرایی را در گروه اجازه NEARBY_DEVICES برای برنامه‌هایی که اتصال‌های دستگاه به نقاط دسترسی اطراف را ازطریق Wi-Fi مدیریت می‌کنند معرفی می‌کند. این اجازه، NEARBY_WIFI_DEVICES، موارد استفاده از Wi-Fi را مانند موارد زیر برآورده می‌کند:

  • دستگاه‌های اطراف (مثل چاپگرها یا دستگاه‌های ارسال محتوای رسانه) را پیدا کنید یا به آن‌ها متصل شوید. این گردش کار به برنامه شما اجازه می‌دهد این نوع تکالیف را انجام دهد:
    • اطلاعات نقطه دسترسی را ازطریق باند خارجی، مثلاً ازطریق BLE، دریافت کنید.
    • دستگاه‌ها را ازطریق Wi-Fi Aware کاوش کنید و به آن‌ها متصل شوید و بااستفاده از نقطه اتصال فقط محلی متصل شوید.
    • دستگاه‌ها را ازطریق Wi-Fi Direct پیدا کنید و به آن‌ها متصل شوید.
  • اتصال به SSID شناخته‌شده‌ای را آغاز کند، مثلاً خودرو یا دستگاه خانه هوشمند.
  • نقطه اتصال فقط محلی راه‌اندازی کنید.
  • محدوده دستگاه‌های Wi-Fi Aware اطراف.

تا زمانی که برنامه‌تان اطلاعات مکان فیزیکی را از میاناهای برنامه‌سازی کاربردی Wi-Fi دریافت نمی‌کند، وقتی Android نسخه ۱۳ یا بالاتر را هدف قرار می‌دهید و از میاناهای برنامه‌سازی کاربردی Wi-Fi استفاده می‌کنید، به‌جای ACCESS_FINE_LOCATION، NEARBY_WIFI_DEVICES را درخواست کنید. وقتی اجازه NEARBY_WIFI_DEVICES را اعلام می‌کنید، به‌طور جدی تأکید کنید که برنامه‌تان هرگز اطلاعات مکان فیزیکی را از میاناهای برنامه‌سازی کاربردی Wi-Fi دریافت نمی‌کند. برای انجام این کار، مشخصه android:usesPermissionFlags را روی neverForLocation تنظیم کنید. این فرایند مشابه فرایندی است که در Android 12 (سطح میانای برنامه‌سازی کاربردی ۳۱) و بالاتر انجام می‌دهید وقتی ادعا می‌کنید که اطلاعات دستگاه بلوتوث هرگز برای مکان استفاده نمی‌شود.

درباره نحوه درخواست اجازه برای دسترسی به دستگاه‌های Wi-Fi اطراف بیشتر بدانید.

اجازه‌های رسانه جزئی

دو دکمه کادر گفتگو، از بالا به پایین، «مجاز است» و «مجاز نیست» هستند
شکل ۱. کادر گفتگوی اجازه‌های سیستم که وقتی اجازه READ_MEDIA_AUDIO را درخواست می‌کنید، کاربر می‌بیند.

اگر برنامه‌تان Android نسخه ۱۳ یا بالاتر را هدف قرار می‌دهد و نیاز دارد به فایل‌های رسانه‌ای که برنامه‌های دیگر ایجاد کرده‌اند دسترسی داشته باشد، باید به‌جای اجازه READ_EXTERNAL_STORAGE یک یا چند مورد از اجازه‌های رسانه‌ای جزئی زیر را درخواست کنید:

نوع رسانه اجازه درخواست کردن
تصویرها و عکس‌ها READ_MEDIA_IMAGES
ویدیوها READ_MEDIA_VIDEO
فایل‌های صوتی READ_MEDIA_AUDIO

قبل‌از دسترسی به فایل‌های رسانه‌ای برنامه دیگر، درستی‌سنجی کنید که کاربر اجازه‌های رسانه‌ای جزئی مناسب را به برنامه شما اعطا کرده باشد.

شکل ۱ برنامه‌ای را نشان می‌دهد که اجازه READ_MEDIA_AUDIO را درخواست می‌کند.

اگر هم اجازه READ_MEDIA_IMAGES و هم اجازه READ_MEDIA_VIDEO را به‌طور هم‌زمان درخواست کنید، فقط یک کادر گفتگوی اجازه سیستم نشان داده می‌شود.

اگر قبلاً به برنامه شما اجازه READ_EXTERNAL_STORAGE داده شده باشد، هرگونه اجازه READ_MEDIA_* درخواست‌شده به‌طور خودکار هنگام ارتقا دادن اعطا می‌شود. می‌توانید از فرمان ADB زیر برای بررسی اجازه‌های ارتقایافته استفاده کنید:

adb shell cmd appops get --uid PACKAGE_NAME

استفاده از حسگرهای بدن در پس‌زمینه به اجازه جدید نیاز دارد

Android 13 مفهوم دسترسی «هنگام استفاده» را برای حسگرهای بدن، مانند ضربان قلب، دما، و درصد اکسیژن خون معرفی می‌کند. این مدل دسترسی بسیار شبیه به مدلی است که سیستم برای مکان در Android 10 (سطح میانای برنامه‌سازی کاربردی ۲۹) معرفی کرده است.

اگر برنامه شما Android نسخه ۱۳ را هدف قرار می‌دهد و هنگام اجرا در پس‌زمینه به دسترسی به اطلاعات حسگر بدن نیاز دارد، باید علاوه‌بر اجازه موجود BODY_SENSORS اجازه جدید BODY_SENSORS_BACKGROUND را نیز اعلام کنید.

عملکرد و باتری

استفاده از منابع باتری

اگر کاربر برنامه شما را در وضعیت «محدودشده» برای مصرف باتری در پس‌زمینه قرار دهد درحالی‌که برنامه شما Android 13 را هدف قرار می‌دهد، سیستم BOOT_COMPLETED یا LOCKED_BOOT_COMPLETED را تا زمانی که برنامه به دلایل دیگر راه‌اندازی نشود، ارائه نمی‌دهد.

تجربه کاربری

کنترل‌های رسانه برگرفته از PlaybackState

برای برنامه‌هایی که Android 13 (سطح میانای برنامه‌سازی کاربردی ۳۳) و بالاتر را هدف‌یابی می‌کنند، سیستم کنترل‌های رسانه را از کنش‌های PlaybackState مشتق می‌کند. این کار به سیستم اجازه می‌دهد مجموعه غنی‌تری از کنترل‌ها را نشان دهد که ازنظر فنی بین تلفن‌ها و دستگاه‌های رایانه لوحی سازگار هستند و همچنین با نحوه ارائه کنترل‌های رسانه در سایر پلاتفرم‌های Android مانند Android Auto و Android TV مطابقت دارند.

شکل ۲ نمونه‌ای از نحوه نمایش این مورد را در تلفن و رایانه لوحی نشان می‌دهد.

کنترل‌های رسانه ازنظر نحوه نمایش در تلفن و رایانه لوحی،
            بااستفاده از نمونه‌ای از قطعه نمونه که نحوه نمایش دکمه‌ها را نشان می‌دهد
شکل ۲: کنترل‌های رسانه در دستگاه‌های تلفن و رایانه لوحی

پیش‌از Android 13، سیستم حداکثر پنج کنش را از MediaStyle اعلان به‌ترتیبی که اضافه شده بودند نمایش می‌داد. در حالت فشرده—برای مثال، در تنظیمات فوری جمع‌شده—حداکثر سه کنش مشخص‌شده با setShowActionsInCompactView() نشان داده می‌شد.

از Android 13، سیستم حداکثر پنج دکمه کنش را براساس PlaybackState نمایش می‌دهد که در جدول زیر شرح داده شده است. در حالت فشرده، فقط سه جایگاه کنش اول نمایش داده می‌شود. برای برنامه‌هایی که Android 13 را هدف قرار نمی‌دهند یا برنامه‌هایی که PlaybackState ندارند، سیستم کنترل‌ها را براساس فهرست Action اضافه‌شده به اعلان MediaStyle (همان‌طور که در پاراگراف قبلی شرح داده شد) نمایش می‌دهد.

جایگاه کنش معیارها
1 پخش کردن وضعیت کنونی PlaybackState یکی از موارد زیر است:
  • STATE_NONE
  • STATE_STOPPED
  • STATE_PAUSED
  • STATE_ERROR
درحال بار کردن گردونه وضعیت کنونی PlaybackState یکی از موارد زیر است:
  • STATE_CONNECTING
  • STATE_BUFFERING
توقف موقت وضعیت کنونی 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 (سطح میانای برنامه‌سازی کاربردی ۳۳) یا بالاتر را هدف‌یابی می‌کنند، روش setForceDark() منسوخ شده است و درصورت فراخوانی این روش، هیچ عملیاتی انجام نمی‌شود.

درعوض، WebView اکنون همیشه پرس‌وجوی رسانه prefers-color-scheme را براساس مشخصه زمینه برنامه، isLightTheme، تنظیم می‌کند. به عبارت دیگر، اگر isLightTheme برابر با true باشد یا مشخص نشده باشد، prefers-color-scheme برابر با light است؛ درغیراین‌صورت، برابر با dark است. این رفتار به این معنی است که سبک روشن یا تاریک محتوای وب به‌طور خودکار اعمال می‌شود تا با زمینه برنامه مطابقت داشته باشد، البته اگر محتوا از آن پشتیبانی کند.

برای اکثر برنامه‌ها، رفتار جدید باید سبک‌های مناسب برنامه را به‌طور خودکار اعمال کند، اما باید برنامه‌تان را آزمایش کنید تا مواردی را که ممکن است تنظیمات حالت تاریک را به‌طور دستی کنترل کرده باشید بررسی کنید.

اگر هنوز لازم است رفتار زمینه رنگی برنامه‌تان را سفارشی‌سازی کنید، به‌جای آن از روش setAlgorithmicDarkeningAllowed() استفاده کنید. برای سازگاری با نسخه‌های قدیمی‌تر Android، توصیه می‌کنیم از روش معادل setAlgorithmicDarkeningAllowed() در AndroidX استفاده کنید.

برای کسب اطلاعات بیشتر درباره رفتاری که می‌توانید در برنامه‌تان انتظار داشته باشید، بسته به تنظیمات targetSdkVersion و زمینه برنامه‌تان، به اسناد مربوط به آن روش مراجعه کنید.

اتصال‌پذیری

BluetoothAdapter#enable()‎ و BluetoothAdapter#disable()‎ منسوخ شده‌اند

برای برنامه‌هایی که Android 13 (سطح میانای برنامه‌سازی کاربردی ۳۳) یا بالاتر را هدف‌یابی می‌کنند، روش‌های BluetoothAdapter#enable() و BluetoothAdapter#disable() منسوخ شده‌اند و همیشه false را برمی‌گردانند.

انواع برنامه‌های زیر از این تغییرات معاف هستند:

  • برنامه‌های «مالک دستگاه»
  • برنامه‌های مالک نمایه
  • برنامه‌های سیستم

خدمات Google Play

اجازه برای شناسه تبلیغاتی لازم است

برنامه‌هایی که از شناسه تبلیغاتی خدمات Google Play استفاده می‌کنند و Android 13 (سطح میانای برنامه‌سازی کاربردی ۳۳) و بالاتر را هدف قرار می‌دهند باید اجازه معمول 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 یا بالاتر این اجازه را اعلام نکند، شناسه تبلیغاتی به‌طور خودکار برداشته می‌شود و با رشته‌ای از صفر جایگزین می‌شود.

اگر برنامه‌تان از کیت‌های توسعه نرم‌افزاری استفاده می‌کند که اجازه AD_ID را در مانیفست کتابخانه اعلام می‌کنند، این اجازه به‌طور پیش‌فرض با فایل مانیفست برنامه‌تان ادغام می‌شود. در این حالت، لازم نیست اجازه را در فایل مانیفست برنامه‌تان اعلام کنید.

برای کسب اطلاعات بیشتر، به شناسه تبلیغاتی در راهنمای «کنسول Play» مراجعه کنید.

محدودیت‌های غیرکیت توسعه نرم‌افزار به‌روز شد

Android 13 شامل فهرست‌های به‌روزشده‌ای از میاناهای غیرکیت توسعه نرم‌افزار محدودشده است که براساس همکاری با توسعه‌دهندگان Android و جدیدترین آزمایش‌های داخلی تهیه شده است. هرزمان ممکن باشد، پیش‌از محدود کردن میاناهای غیرکیت توسعه نرم‌افزار، مطمئن می‌شویم که جایگزین‌های عمومی دردسترس باشند.

اگر برنامه شما Android 13 را هدف قرار نمی‌دهد، برخی‌از این تغییرات ممکن است فوراً بر شما تأثیر نگذارد. بااین‌حال، اگرچه درحال‌حاضر می‌توانید از برخی میاناهای غیرکیت توسعه نرم‌افزار استفاده کنید (بسته به سطح میانای برنامه‌سازی کاربردی هدف برنامه‌تان)، استفاده از هرگونه روش یا فیلد غیرکیت توسعه نرم‌افزار همیشه خطر بالایی برای ازکار افتادن برنامه‌تان دارد.

اگر مطمئن نیستید که برنامه‌تان از میاناهای غیرکیت توسعه نرم‌افزار استفاده می‌کند یا نه، می‌توانید برنامه‌تان را آزمایش کنید تا متوجه شوید. اگر برنامه‌تان به میاناهای غیر SDK متکی است، باید برنامه‌ریزی برای انتقال به جایگزین‌های SDK را شروع کنید. بااین‌حال، می‌دانیم که برخی‌از برنامه‌ها موارد استفاده معتبری برای استفاده از میاناهای غیرکیت توسعه نرم‌افزار دارند. اگر نمی‌توانید جایگزینی برای استفاده از میانای غیرکیت توسعه نرم‌افزار برای ویژگی‌ای در برنامه‌تان پیدا کنید، باید درخواست میانای برنامه‌سازی کاربردی عمومی جدیدی بدهید.

برای کسب اطلاعات بیشتر درباره تغییرات این نسخه از Android، به به‌روزرسانی‌های محدودیت‌های میانای غیرکیت توسعه نرم‌افزار در Android 13 مراجعه کنید. برای کسب اطلاعات بیشتر درباره میاناهای غیرکیت توسعه نرم‌افزار به‌طور کلی، به محدودیت‌های میاناهای غیرکیت توسعه نرم‌افزار مراجعه کنید.