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

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

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

حریم خصوصی

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

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

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

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

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

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

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

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

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

دو دکمه‌ی این پنجره‌ی محاوره‌ای، از بالا به پایین، عبارتند از اجازه دادن (Allow) و اجازه ندادن (Don't allow).
شکل ۱. پنجره‌ی مجوزهای سیستم که کاربر هنگام درخواست مجوز READ_MEDIA_AUDIO می‌بیند.

اگر برنامه شما برای اندروید ۱۳ یا بالاتر طراحی شده و نیاز به دسترسی به فایل‌های رسانه‌ای ایجاد شده توسط سایر برنامه‌ها دارد ، باید به جای مجوز 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

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

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

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

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

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

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

تجربه کاربری

کنترل‌های رسانه‌ای مشتق شده از PlaybackState

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

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

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

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

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

اسلات اکشن معیارها
۱ بازی وضعیت فعلی PlaybackState یکی از موارد زیر است:
  • STATE_NONE
  • STATE_STOPPED
  • STATE_PAUSED
  • STATE_ERROR
بارگیری اسپینر وضعیت فعلی PlaybackState یکی از موارد زیر است:
  • STATE_CONNECTING
  • STATE_BUFFERING
مکث وضعیت فعلی PlaybackState هیچ یک از موارد فوق نیست.
۲ قبلی اقدامات PlaybackState شامل ACTION_SKIP_TO_PREVIOUS می‌شود.
سفارشی اکشن‌های PlaybackState شامل ACTION_SKIP_TO_PREVIOUS نمی‌شوند و اکشن‌های سفارشی PlaybackState شامل یک اکشن سفارشی هستند که هنوز قرار داده نشده است.
خالی موارد اضافی PlaybackState شامل یک مقدار بولی true برای کلید SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV است.
۳ بعدی اقدامات PlaybackState شامل ACTION_SKIP_TO_NEXT می‌شود.
سفارشی اکشن‌های PlaybackState شامل ACTION_SKIP_TO_NEXT نمی‌شوند و اکشن‌های سفارشی PlaybackState شامل یک اکشن سفارشی هستند که هنوز قرار داده نشده است.
خالی موارد اضافی PlaybackState شامل یک مقدار بولی true برای کلید SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT است.
۴ سفارشی اقدامات سفارشی PlaybackState شامل یک اقدام سفارشی است که هنوز قرار داده نشده است.
۵ سفارشی اقدامات سفارشی PlaybackState شامل یک اقدام سفارشی است که هنوز قرار داده نشده است.

اکشن‌های سفارشی به ترتیبی که به PlaybackState اضافه شده‌اند، قرار می‌گیرند.

تم رنگی برنامه به طور خودکار به محتوای WebView اعمال می‌شود

برای برنامه‌هایی که اندروید ۱۳ (سطح API ۳۳) یا بالاتر را هدف قرار می‌دهند، متد setForceDark() منسوخ شده است و در صورت فراخوانی این متد، برنامه اجرا نمی‌شود.

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

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

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

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

اتصال

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

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

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

  • برنامه‌های مالک دستگاه
  • برنامه‌های مالک پروفایل
  • برنامه‌های سیستمی

سرویس‌های گوگل پلی

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

برنامه‌هایی که از شناسه تبلیغاتی سرویس‌های گوگل پلی استفاده می‌کنند و اندروید ۱۳ (سطح API ۳۳) و بالاتر را هدف قرار می‌دهند، باید مجوز عادی 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>

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

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

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

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

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

اگر برنامه شما اندروید ۱۳ را هدف قرار نمی‌دهد، ممکن است برخی از این تغییرات بلافاصله شما را تحت تأثیر قرار ندهند. با این حال، اگرچه در حال حاضر می‌توانید از برخی رابط‌های غیر SDK ( بسته به سطح API هدف برنامه خود ) استفاده کنید، استفاده از هر روش یا فیلد غیر SDK همیشه خطر بالای خرابی برنامه شما را به همراه دارد.

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

برای کسب اطلاعات بیشتر در مورد تغییرات این نسخه از اندروید، به «به‌روزرسانی محدودیت‌های رابط‌های غیر SDK در اندروید ۱۳» مراجعه کنید. برای کسب اطلاعات بیشتر در مورد رابط‌های غیر SDK به طور کلی، به «محدودیت‌های رابط‌های غیر SDK» مراجعه کنید.