نمای کلی ویژگی ها و API ها

اندروید ۱۵ ویژگی‌ها و APIهای فوق‌العاده‌ای را برای توسعه‌دهندگان معرفی می‌کند. بخش‌های زیر این ویژگی‌ها را خلاصه می‌کنند تا به شما در شروع کار با APIهای مرتبط کمک کنند.

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

دوربین و رسانه

اندروید ۱۵ شامل ویژگی‌های متنوعی است که تجربه دوربین و رسانه را بهبود می‌بخشد و به شما امکان دسترسی به ابزارها و سخت‌افزارهایی را می‌دهد که به سازندگان در تحقق بخشیدن به دیدگاه‌هایشان در اندروید کمک می‌کند.

برای اطلاعات بیشتر در مورد جدیدترین ویژگی‌ها و راه‌حل‌های توسعه‌دهندگان برای رسانه و دوربین اندروید، به سخنرانی « ساختن تجربیات مدرن رسانه و دوربین اندروید» از کنفرانس Google I/O مراجعه کنید.

تقویت نور کم

Android 15 introduces Low Light Boost, an auto-exposure mode available to both Camera 2 and the night mode camera extension. Low Light Boost adjusts the exposure of the Preview stream in low-light conditions. This is different from how the night mode camera extension creates still images, because night mode combines a burst of photos to create a single, enhanced image. While night mode works very well for creating a still image, it can't create a continuous stream of frames, but Low Light Boost can. Thus, Low Light Boost enables camera capabilities, such as:

  • Providing an enhanced image preview, so users are better able to frame their low-light pictures
  • Scanning QR codes in low light

If you enable Low Light Boost, it automatically turns on when there's a low light level, and turns off when there's more light.

Apps can record off the Preview stream in low-light conditions to save a brightened video.

For more information, see Low Light Boost.

کنترل‌های دوربین درون برنامه‌ای

اندروید 15 یک افزونه برای کنترل بیشتر بر سخت افزار دوربین و الگوریتم های آن در دستگاه های پشتیبانی شده اضافه می کند:

  • تنظیمات پیشرفته قدرت فلاش که امکان کنترل دقیق شدت فلاش را در هر دو حالت SINGLE و TORCH در هنگام ثبت تصاویر فراهم می کند.

کنترل فضای سر در HDR

Android 15 chooses HDR headroom that is appropriate for the underlying device capabilities and bit-depth of the panel. For pages that have lots of SDR content, such as a messaging app displaying a single HDR thumbnail, this behavior can end up adversely influencing the perceived brightness of the SDR content. Android 15 lets you control the HDR headroom with setDesiredHdrHeadroom to strike a balance between SDR and HDR content.

The brightness of SDR UI elements on the left screen appears to be more uniform than the brightness on the right screen, which simulates possible headroom issues when HDR and SDR content are mixed. By adjusting the HDR headroom, you can achieve a better balance between the SDR and HDR content.

کنترل بلندی صدا

Android 15 introduces support for the CTA-2075 loudness standard to help you avoid audio loudness inconsistencies and ensure users don't have to constantly adjust volume when switching between content. The system leverages known characteristics of the output devices (headphones and speaker) along with loudness metadata available in AAC audio content to intelligently adjust the audio loudness and dynamic range compression levels.

To enable this feature, you need to ensure loudness metadata is available in your AAC content and enable the platform feature in your app. For this, you instantiate a LoudnessCodecController object by calling its create factory method with the audio session ID from the associated AudioTrack; this automatically starts applying audio updates. You can pass an OnLoudnessCodecUpdateListener to modify or filter loudness parameters before they are applied on the MediaCodec.

// Media contains metadata of type MPEG_4 OR MPEG_D
val mediaCodec = 
val audioTrack = AudioTrack.Builder()
                                .setSessionId(sessionId)
                                .build()
...
// Create new loudness controller that applies the parameters to the MediaCodec
try {
   val lcController = LoudnessCodecController.create(mSessionId)
   // Starts applying audio updates for each added MediaCodec
}

AndroidX media3 ExoPlayer will also be updated to use the LoudnessCodecController APIs for a seamless app integration.

دستگاه‌های مجازی MIDI 2.0

Android 13 برای اتصال به دستگاه‌های MIDI 2.0 با استفاده از USB ، که با استفاده از بسته‌های جهانی MIDI (UMP) ارتباط برقرار می‌کنند، پشتیبانی اضافه کرد. Android 15 پشتیبانی UMP را به برنامه‌های MIDI مجازی گسترش می‌دهد، و برنامه‌های ترکیب را قادر می‌سازد تا برنامه‌های سینتی‌سایزر را به‌عنوان یک دستگاه مجازی MIDI 2.0 مانند دستگاه‌های USB MIDI 2.0 کنترل کنند.

رمزگشایی نرم‌افزار AV1 کارآمدتر

لوگوی dav1d

dav1d ، رمزگشای محبوب نرم افزار AV1 از VideoLAN برای دستگاه های اندرویدی که از رمزگشایی AV1 در سخت افزار پشتیبانی نمی کنند، در دسترس است. عملکرد dav1d تا 3 برابر بیشتر از رمزگشای نرم‌افزار AV1 قدیمی است و امکان پخش HD AV1 را برای کاربران بیشتری از جمله برخی دستگاه‌های سطح پایین و متوسط ​​فراهم می‌کند.

برنامه شما باید با فراخوانی آن با نام "c2.android.av1-dav1d.decoder" استفاده از dav1d را انتخاب کند. dav1d در به روز رسانی بعدی به عنوان رمزگشای پیش فرض نرم افزار AV1 تبدیل خواهد شد. این پشتیبانی استاندارد شده و برای دستگاه‌های Android 11 که به‌روزرسانی‌های سیستم Google Play را دریافت می‌کنند، پشتیبانی می‌شود.

بهره‌وری و ابزارهای توسعه‌دهندگان

در حالی که بیشتر کار ما برای بهبود بهره‌وری شما حول ابزارهایی مانند اندروید استودیو ، جت‌پک کامپوز و کتابخانه‌های اندروید جت‌پک می‌چرخد، ما همیشه به دنبال راه‌هایی در پلتفرم هستیم تا به شما کمک کنیم راحت‌تر به چشم‌اندازتان برسید.

به‌روزرسانی‌های OpenJDK 17

Android 15 continues the work of refreshing Android's core libraries to align with the features in the latest OpenJDK LTS releases.

The following key features and improvements are included:

These APIs are updated on over a billion devices running Android 12 (API level 31) and higher through Google Play System updates, so you can target the latest programming features.

بهبودهای پی‌دی‌اف

اندروید 15 شامل بهبودهای قابل توجهی در APIهای PdfRenderer است. برنامه‌ها می‌توانند ویژگی‌های پیشرفته‌ای مانند ارائه فایل‌های محافظت‌شده با رمز عبور ، حاشیه‌نویسی، ویرایش فرم ، جستجو و انتخاب با کپی را در خود جای دهند. بهینه سازی خطی PDF برای سرعت بخشیدن به مشاهده PDF محلی و کاهش استفاده از منابع پشتیبانی می شود. کتابخانه PDF Jetpack از این APIها برای ساده کردن افزودن قابلیت مشاهده PDF به برنامه شما استفاده می کند.

آخرین به‌روزرسانی‌های رندر PDF شامل ویژگی‌هایی مانند جستجوی یک فایل PDF تعبیه‌شده است.

PdfRenderer به ماژولی منتقل شده است که می‌تواند با استفاده از به‌روزرسانی‌های سیستم Google Play مستقل از نسخه پلتفرم به‌روزرسانی شود، و ما با ایجاد یک نسخه سازگار پیش از Android 15 از این تغییرات به Android 11 (سطح API 30) پشتیبانی می‌کنیم. سطح API، به نام PdfRendererPreV .

،

اندروید 15 شامل بهبودهای قابل توجهی در APIهای PdfRenderer است. برنامه‌ها می‌توانند ویژگی‌های پیشرفته‌ای مانند ارائه فایل‌های محافظت‌شده با رمز عبور ، حاشیه‌نویسی، ویرایش فرم ، جستجو و انتخاب با کپی را در خود جای دهند. بهینه سازی خطی PDF برای سرعت بخشیدن به مشاهده PDF محلی و کاهش استفاده از منابع پشتیبانی می شود. کتابخانه PDF Jetpack از این APIها برای ساده کردن افزودن قابلیت مشاهده PDF به برنامه شما استفاده می کند.

آخرین به‌روزرسانی‌های رندر PDF شامل ویژگی‌هایی مانند جستجوی یک فایل PDF تعبیه‌شده است.

PdfRenderer به ماژولی منتقل شده است که می‌تواند با استفاده از به‌روزرسانی‌های سیستم Google Play مستقل از نسخه پلتفرم به‌روزرسانی شود، و ما با ایجاد یک نسخه سازگار پیش از Android 15 از این تغییرات به Android 11 (سطح API 30) پشتیبانی می‌کنیم. سطح API، به نام PdfRendererPreV .

،

اندروید 15 شامل بهبودهای قابل توجهی در APIهای PdfRenderer است. برنامه‌ها می‌توانند ویژگی‌های پیشرفته‌ای مانند ارائه فایل‌های محافظت‌شده با رمز عبور ، حاشیه‌نویسی، ویرایش فرم ، جستجو و انتخاب با کپی را در خود جای دهند. بهینه سازی خطی PDF برای سرعت بخشیدن به مشاهده PDF محلی و کاهش استفاده از منابع پشتیبانی می شود. کتابخانه PDF Jetpack از این APIها برای ساده کردن افزودن قابلیت مشاهده PDF به برنامه شما استفاده می کند.

آخرین به‌روزرسانی‌های رندر PDF شامل ویژگی‌هایی مانند جستجوی یک فایل PDF تعبیه‌شده است.

PdfRenderer به ماژولی منتقل شده است که می‌تواند با استفاده از به‌روزرسانی‌های سیستم Google Play مستقل از نسخه پلتفرم به‌روزرسانی شود، و ما با ایجاد یک نسخه سازگار پیش از Android 15 از این تغییرات به Android 11 (سطح API 30) پشتیبانی می‌کنیم. سطح API، به نام PdfRendererPreV .

اصلاحات تغییر خودکار زبان

اندروید 14 روی دستگاه، تشخیص چند زبانه در صدا با جابجایی خودکار بین زبان‌ها را اضافه کرده است، اما این می‌تواند باعث حذف کلمات شود، به خصوص زمانی که زبان‌ها با مکث کمتری بین دو گفته جابجا می‌شوند. Android 15 کنترل‌های اضافی را اضافه می‌کند تا به برنامه‌ها کمک کند این تغییر را در مورد استفاده خود تنظیم کنند. EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS تغییر خودکار را به ابتدای جلسه صوتی محدود می کند، در حالی که EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES تغییر زبان را پس از تعداد معینی سوئیچ غیرفعال می کند. این گزینه‌ها مخصوصاً زمانی مفید هستند که انتظار دارید در طول جلسه یک زبان صحبت شود که باید به طور خودکار شناسایی شود.

بهبود رابط برنامه‌نویسی کاربردی فونت متغیر OpenType

اندروید 15 قابلیت استفاده از فونت متغیر OpenType را بهبود می بخشد. شما می توانید یک نمونه FontFamily از یک فونت متغیر بدون تعیین محورهای وزنی با API buildVariableFamily ایجاد کنید. ارائه‌دهنده متن، مقدار محور wght را لغو می‌کند تا با متن نمایش داده شده مطابقت داشته باشد.

استفاده از API کد ایجاد Typeface را به میزان قابل توجهی ساده می کند:

کاتلین

val newTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build()

جاوا

Typeface newTypeface = Typeface.CustomFallbackBuilder(
            new FontFamily.Builder(
                new Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build();

قبلاً، برای ایجاد همان Typeface ، به کد بسیار بیشتری نیاز داشتید:

کاتلین

val oldTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf")
                    .setFontVariationSettings("'wght' 400")
                    .setWeight(400)
                    .build())
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 100")
                        .setWeight(100)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 200")
                        .setWeight(200)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 300")
                        .setWeight(300)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 500")
                        .setWeight(500)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 600")
                        .setWeight(600)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 700")
                        .setWeight(700)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 800")
                        .setWeight(800)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 900")
                        .setWeight(900)
                        .build()
                ).build()
        ).build()

جاوا

Typeface oldTypeface = new Typeface.CustomFallbackBuilder(
    new FontFamily.Builder(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 400")
            .setWeight(400)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 100")
            .setWeight(100)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 200")
            .setWeight(200)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 300")
            .setWeight(300)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 500")
            .setWeight(500)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 600")
            .setWeight(600)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 700")
            .setWeight(700)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 800")
            .setWeight(800)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 900")
            .setWeight(900)
            .build()
    )
    .build()
).build();

در اینجا مثالی از نحوه رندر یک Typeface ایجاد شده با APIهای قدیمی و جدید آورده شده است:

نمونه ای از تفاوت رندر تایپ فیس با استفاده از API های جدید و قدیمی

در این مثال، Typeface ایجاد شده با API قدیمی توانایی ایجاد وزن فونت های دقیق برای نمونه های Font 350، 450، 550 و 650 را ندارد، بنابراین رندر به نزدیک ترین وزن باز می گردد. بنابراین در این حالت به جای 350 عدد 300 و به جای 450 عدد 400 و به همین ترتیب رندر می شود. در مقابل، Typeface ایجاد شده با APIهای جدید به صورت پویا یک نمونه Font برای وزن مشخص ایجاد می کند، بنابراین وزن های دقیق برای 350، 450، 550 و 650 نیز ارائه می شود.

کنترل‌های تفکیک خطوط به صورت جزئی

Starting in Android 15, a TextView and the underlying line breaker can preserve the given portion of text in the same line to improve readability. You can take advantage of this line break customization by using the <nobreak> tag in string resources or createNoBreakSpan. Similarly, you can preserve words from hyphenation by using the <nohyphen> tag or createNoHyphenationSpan.

For example, the following string resource doesn't include a line break, and renders with the text "Pixel 8 Pro." breaking in an undesirable place:

<resources>
    <string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>

In contrast, this string resource includes the <nobreak> tag, which wraps the phrase "Pixel 8 Pro." and prevents line breaks:

<resources>
    <string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>

The difference in how these strings are rendered is shown in the following images:

Layout for a line of text where the phrase "Pixel 8 Pro." isn't wrapped using a <nobreak> tag.
Layout for the same line of text where the phrase "Pixel 8 Pro." is wrapped using a <nobreak> tag.

بایگانی برنامه

Android و Google Play سال گذشته پشتیبانی از بایگانی برنامه را اعلام کردند و به کاربران این امکان را داد تا با حذف بخشی از برنامه‌های کم استفاده از دستگاه که با استفاده از Android App Bundle در Google Play منتشر شده‌اند، فضا را آزاد کنند. اندروید 15 شامل پشتیبانی سطح سیستم عامل برای بایگانی و حذف بایگانی برنامه است که اجرای آن را برای همه فروشگاه های برنامه آسان تر می کند.

برنامه‌های دارای مجوز REQUEST_DELETE_PACKAGES می‌توانند با روش PackageInstaller requestArchive تماس بگیرند تا بایگانی یک بسته برنامه نصب‌شده را درخواست کنند، که APK و هر فایل حافظه پنهان را حذف می‌کند، اما داده‌های کاربر را حفظ می‌کند. برنامه های آرشیو شده به عنوان برنامه های قابل نمایش از طریق API های LauncherApps برگردانده می شوند. کاربران برای برجسته کردن آرشیو بودن آن برنامه ها، یک رابط کاربری را مشاهده خواهند کرد. اگر کاربر روی یک برنامه بایگانی شده ضربه بزند، نصب کننده مسئول درخواستی برای حذف بایگانی آن دریافت می کند و فرآیند بازیابی می تواند توسط پخش ACTION_PACKAGE_ADDED نظارت شود.

فعال کردن حالت ۱۶ کیلوبایت روی دستگاه با استفاده از گزینه‌های توسعه‌دهنده

برای بوت کردن دستگاه در حالت ۱۶ کیلوبایت، گزینه توسعه‌دهنده Boot with 16KB page size را فعال یا غیرفعال کنید.

در نسخه‌های QPR اندروید ۱۵، می‌توانید از گزینه توسعه‌دهنده که در دستگاه‌های خاصی موجود است، برای بوت کردن دستگاه در حالت ۱۶ کیلوبایت و انجام آزمایش روی دستگاه استفاده کنید . قبل از استفاده از گزینه توسعه‌دهنده، به تنظیمات > سیستم > به‌روزرسانی‌های نرم‌افزار بروید و هرگونه به‌روزرسانی موجود را اعمال کنید.

این گزینه توسعه‌دهنده در دستگاه‌های زیر موجود است:

  • پیکسل ۸ و ۸ پرو (با اندروید ۱۵ QPR1 یا بالاتر)

  • پیکسل ۸a (با اندروید ۱۵ QPR1 یا بالاتر)

  • پیکسل ۹، ۹ پرو و ​​۹ پرو ایکس‌ال (با اندروید ۱۵ نسخه QPR2 یا بالاتر)

  • پیکسل ۹a (با اندروید ۱۶ یا بالاتر)

گرافیک

اندروید ۱۵ جدیدترین پیشرفت‌های گرافیکی، از جمله ANGLE و اضافات سیستم گرافیکی Canvas را به ارمغان می‌آورد.

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

لوگوی ولکان

سخت‌افزار اندروید از روزهای اولیه که سیستم‌عامل اصلی بر روی یک CPU اجرا می‌شد و GPU‌ها با استفاده از APIهای مبتنی بر خطوط لوله با عملکرد ثابت، تقریباً تکامل یافته‌اند. API گرافیکی Vulkan® از اندروید 7.0 (سطح API 24) در NDK با انتزاعی سطح پایین‌تر موجود است که سخت‌افزار مدرن GPU را بهتر منعکس می‌کند، مقیاس بهتری برای پشتیبانی از چندین هسته CPU دارد و سربار درایور CPU را کاهش می‌دهد - که منجر به بهبود می‌شود. عملکرد برنامه Vulkan توسط تمام موتورهای بازی مدرن پشتیبانی می شود.

Vulkan رابط ترجیحی اندروید نسبت به GPU است. بنابراین، Android 15 شامل ANGLE به عنوان یک لایه اختیاری برای اجرای OpenGL® ES در بالای Vulkan است. حرکت به ANGLE اجرای OpenGL Android را برای سازگاری بهتر و در برخی موارد بهبود عملکرد استاندارد می کند. می‌توانید پایداری و عملکرد برنامه OpenGL ES خود را با ANGLE با فعال کردن گزینه توسعه‌دهنده در تنظیمات -> سیستم -> گزینه‌های برنامه‌نویس -> تجربی: فعال کردن ANGLE در Android 15 آزمایش کنید.

Android ANGLE در نقشه راه Vulkan

نقشه راه تغییرات آتی در APIهای GPU اندروید.

به عنوان بخشی از ساده‌سازی پشته GPU، در آینده، ANGLE را به عنوان درایور سیستم GL در دستگاه‌های جدید بیشتری ارسال خواهیم کرد، با این انتظار که در آینده OpenGL/ES فقط از طریق ANGLE در دسترس باشد. همانطور که گفته شد، ما قصد داریم به پشتیبانی از OpenGL ES در همه دستگاه‌ها ادامه دهیم .

مراحل بعدی توصیه می شود

از گزینه های توسعه دهنده برای انتخاب درایور ANGLE برای OpenGL ES و آزمایش برنامه خود استفاده کنید. برای پروژه‌های جدید، ما قویاً استفاده از Vulkan را برای C/C++ توصیه می‌کنیم.

بهبودهایی برای Canvas

اندروید 15 به مدرن سازی سیستم گرافیکی Canvas اندروید با قابلیت های اضافی ادامه می دهد:

  • Matrix44 یک ماتریس 4x4 برای تبدیل مختصات ارائه می دهد که باید برای دستکاری بوم به صورت سه بعدی استفاده شود.
  • clipShader کلیپ فعلی را با سایه‌زن مشخص شده قطع می‌کند، در حالی که clipOutShader کلیپ را روی تفاوت کلیپ فعلی و سایه‌زن تنظیم می‌کند و هر کدام سایه‌زن را به عنوان یک ماسک آلفا در نظر می‌گیرند. این از ترسیم اشکال پیچیده به طور موثر پشتیبانی می کند.

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

اندروید همچنان بر کمک به شما در بهبود عملکرد و کیفیت برنامه‌هایتان تمرکز دارد. اندروید ۱۵ رابط‌های برنامه‌نویسی کاربردی (API) را معرفی می‌کند که به شما کمک می‌کنند وظایف موجود در برنامه خود را کارآمدتر اجرا کنید، عملکرد برنامه را بهینه کنید و در مورد برنامه‌های خود بینش کسب کنید.

برای بهترین شیوه‌های صرفه‌جویی در مصرف باتری، اشکال‌زدایی در مصرف شبکه و برق، و جزئیات مربوط به نحوه بهبود بهره‌وری باتری در فعالیت‌های پس‌زمینه در اندروید ۱۵ و نسخه‌های اخیر اندروید، به « بهبود بهره‌وری باتری در فعالیت‌های پس‌زمینه در گفتگوی اندروید» از Google I/O مراجعه کنید.

API اطلاعات شروع برنامه

در نسخه‌های قبلی اندروید، راه‌اندازی اپلیکیشن‌ها کمی مرموز بوده است. تعیین اینکه برنامه شما از حالت سرد، گرم یا گرم شروع شده است، چالش برانگیز بود. همچنین دشوار بود که بدانید برنامه شما در طول مراحل مختلف راه اندازی چه مدت زمان صرف کرده است: انشعاب فرآیند، فراخوانی onCreate ، ترسیم اولین فریم و موارد دیگر. وقتی کلاس Application شما نمونه‌سازی شد، هیچ راهی برای دانستن اینکه آیا برنامه از یک پخش، یک ارائه‌دهنده محتوا، یک کار، پشتیبان‌گیری، راه‌اندازی کامل، زنگ هشدار یا یک Activity شروع شده است، نداشتید.

ApplicationStartInfo API در اندروید 15 همه اینها و موارد دیگر را فراهم می کند. حتی می توانید برای کمک به جمع آوری داده های زمان بندی در یک مکان، مهرهای زمانی خود را به جریان اضافه کنید. علاوه بر جمع آوری معیارها، می توانید از ApplicationStartInfo برای کمک به بهینه سازی مستقیم راه اندازی برنامه استفاده کنید. برای مثال، می‌توانید نمونه‌سازی پرهزینه کتابخانه‌های مرتبط با رابط کاربری را در کلاس Application خود در زمانی که برنامه شما به دلیل پخش در حال راه‌اندازی است، حذف کنید.

اطلاعات دقیق حجم برنامه

Since Android 8.0 (API level 26), Android has included the StorageStats.getAppBytes API that summarizes the installed size of an app as a single number of bytes, which is a sum of the APK size, the size of files extracted from the APK, and files that were generated on the device such as ahead-of-time (AOT) compiled code. This number is not very insightful in terms of how your app is using storage.

Android 15 adds the StorageStats.getAppBytesByDataType([type]) API, which lets you get insight into how your app is using up all that space, including APK file splits, AOT and speedup related code, dex metadata, libraries, and guided profiles.

پروفایل‌سازی مدیریت‌شده توسط برنامه

Android 15 شامل کلاس ProfilingManager است که به شما امکان می‌دهد اطلاعات پروفایل را از داخل برنامه خود جمع‌آوری کنید، مانند heap dumps، heap profiles، stack sampling و موارد دیگر. این یک تگ ارائه شده برای شناسایی فایل خروجی که به دایرکتوری فایل های برنامه شما تحویل داده می شود، به برنامه شما پاسخ تماس می دهد. API برای به حداقل رساندن تأثیر عملکرد، نرخ را محدود می کند.

برای ساده‌سازی درخواست‌های نمایه‌سازی در برنامه‌تان، توصیه می‌کنیم از Profiling AndroidX API مربوطه، موجود در Core 1.15.0-rc01 یا بالاتر استفاده کنید.

بهبودهای پایگاه داده SQLite

Android 15 introduces SQLite APIs that expose advanced features from the underlying SQLite engine that target specific performance issues that can manifest in apps. These APIs are included with the update of SQLite to version 3.44.3.

Developers should consult best practices for SQLite performance to get the most out of their SQLite database, especially when working with large databases or when running latency-sensitive queries.

  • Read-only deferred transactions: when issuing transactions that are read-only (don't include write statements), use beginTransactionReadOnly() and beginTransactionWithListenerReadOnly(SQLiteTransactionListener) to issue read-only DEFERRED transactions. Such transactions can run concurrently with each other, and if the database is in WAL mode, they can run concurrently with IMMEDIATE or EXCLUSIVE transactions.
  • Row counts and IDs: APIs were added to retrieve the count of changed rows or the last inserted row ID without issuing an additional query. getLastChangedRowCount() returns the number of rows that were inserted, updated, or deleted by the most recent SQL statement within the current transaction, while getTotalChangedRowCount() returns the count on the current connection. getLastInsertRowId() returns the rowid of the last row to be inserted on the current connection.
  • Raw statements: issue a raw SQlite statement, bypassing convenience wrappers and any additional processing overhead that they may incur.

به‌روزرسانی‌های چارچوب عملکرد پویای اندروید

Android 15 به سرمایه گذاری ما در Android Dynamic Performance Framework (ADPF) ادامه می دهد، مجموعه ای از API ها که به بازی ها و برنامه های فشرده عملکرد اجازه می دهد تا به طور مستقیم با سیستم های قدرت و حرارت دستگاه های Android ارتباط برقرار کنند. در دستگاه‌های پشتیبانی‌شده، Android 15 قابلیت‌های ADPF را اضافه می‌کند:

  • یک حالت بهره وری انرژی برای جلسات راهنمایی که نشان می دهد رشته های مرتبط آنها باید صرفه جویی در مصرف انرژی را به عملکرد ترجیح دهند، که برای بارهای کاری پس زمینه طولانی مدت عالی است.
  • مدت زمان کار GPU و CPU را می توان هر دو در جلسات راهنمایی گزارش کرد و به سیستم اجازه می دهد فرکانس های CPU و GPU را با هم تنظیم کند تا به بهترین شکل نیازهای بار کاری را برآورده کند.
  • آستانه‌های دمایی برای تفسیر وضعیت احتمالی درگیری حرارتی بر اساس پیش‌بینی فضای سر.

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

،

Android 15 به سرمایه گذاری ما در Android Dynamic Performance Framework (ADPF) ادامه می دهد، مجموعه ای از API ها که به بازی ها و برنامه های فشرده عملکرد اجازه می دهد تا به طور مستقیم با سیستم های قدرت و حرارت دستگاه های Android ارتباط برقرار کنند. در دستگاه‌های پشتیبانی‌شده، Android 15 قابلیت‌های ADPF را اضافه می‌کند:

  • یک حالت بهره وری انرژی برای جلسات راهنمایی که نشان می دهد رشته های مرتبط آنها باید صرفه جویی در مصرف انرژی را به عملکرد ترجیح دهند، که برای بارهای کاری پس زمینه طولانی مدت عالی است.
  • مدت زمان کار GPU و CPU را می توان هر دو در جلسات راهنمایی گزارش کرد و به سیستم اجازه می دهد فرکانس های CPU و GPU را با هم تنظیم کند تا به بهترین شکل نیازهای بار کاری را برآورده کند.
  • آستانه‌های دمایی برای تفسیر وضعیت احتمالی درگیری حرارتی بر اساس پیش‌بینی فضای سر.

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

،

Android 15 به سرمایه گذاری ما در Android Dynamic Performance Framework (ADPF) ادامه می دهد، مجموعه ای از API ها که به بازی ها و برنامه های فشرده عملکرد اجازه می دهد تا به طور مستقیم با سیستم های قدرت و حرارت دستگاه های Android ارتباط برقرار کنند. در دستگاه‌های پشتیبانی‌شده، Android 15 قابلیت‌های ADPF را اضافه می‌کند:

  • یک حالت بهره وری انرژی برای جلسات راهنمایی که نشان می دهد رشته های مرتبط آنها باید صرفه جویی در مصرف انرژی را به عملکرد ترجیح دهند، که برای بارهای کاری پس زمینه طولانی مدت عالی است.
  • مدت زمان کار GPU و CPU را می توان هر دو در جلسات راهنمایی گزارش کرد و به سیستم اجازه می دهد فرکانس های CPU و GPU را با هم تنظیم کند تا به بهترین شکل نیازهای بار کاری را برآورده کند.
  • آستانه‌های دمایی برای تفسیر وضعیت احتمالی درگیری حرارتی بر اساس پیش‌بینی فضای سر.

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

حریم خصوصی

اندروید ۱۵ شامل ویژگی‌های متنوعی است که به توسعه‌دهندگان برنامه‌ها کمک می‌کند تا از حریم خصوصی کاربران محافظت کنند.

تشخیص ضبط صفحه نمایش

اندروید 15 پشتیبانی از برنامه ها را اضافه می کند تا تشخیص دهد که آنها در حال ضبط هستند. هر زمان که برنامه بین حالت قابل مشاهده یا نامرئی در یک صفحه ضبط ضبط شده تغییر می کند، یک تماس برگشتی فراخوانی می شود. اگر فعالیت‌های متعلق به UID فرآیند ثبت‌نام در حال ثبت باشد، یک برنامه قابل مشاهده در نظر گرفته می‌شود. به این ترتیب، اگر برنامه شما عملیات حساسی را انجام می دهد، می توانید به کاربر اطلاع دهید که آنها در حال ضبط هستند.

val mCallback = Consumer<Int> { state ->
  if (state == SCREEN_RECORDING_STATE_VISIBLE) {
    // We're being recorded
  } else {
    // We're not being recorded
  }
}

override fun onStart() {
   super.onStart()
   val initialState =
      windowManager.addScreenRecordingCallback(mainExecutor, mCallback)
   mCallback.accept(initialState)
}

override fun onStop() {
    super.onStop()
    windowManager.removeScreenRecordingCallback(mCallback)
}

قابلیت‌های گسترش‌یافته‌ی IntentFilter

Android 15 از طریق UriRelativeFilterGroup که شامل مجموعه‌ای از اشیاء UriRelativeFilter است که مجموعه‌ای از قوانین تطبیق Intent را تشکیل می‌دهد که هر کدام باید رعایت شوند، از جمله پارامترهای جستجوی URL، قطعات URL، و قوانین مسدود کردن یا حذف، از وضوح دقیق‌تر Intent پشتیبانی می‌کند.

این قوانین را می توان در فایل XML AndroidManifest با تگ <uri-relative-filter-group> تعریف کرد، که به صورت اختیاری می تواند یک تگ android:allow داشته باشد. این برچسب‌ها می‌توانند حاوی تگ‌های <data> باشند که از ویژگی‌های تگ داده‌های موجود و همچنین ویژگی‌های android:query و android:fragment استفاده می‌کنند.

در اینجا مثالی از نحو AndroidManifest آورده شده است:

<intent-filter android:autoVerify="true">
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.BROWSABLE" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:scheme="http" />
  <data android:scheme="https" />
  <data android:host="astore.com" />
  <uri-relative-filter-group>
    <data android:pathPrefix="/auth" />
    <data android:query="region=na" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:query="mobileoptout=true" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:fragmentPrefix="faq" />
  </uri-relative-filter-group>
</intent-filter>

فضای خصوصی

The private space can be unlocked and locked to show or hide sensitive apps on a device.

Private space lets users create a separate space on their device where they can keep sensitive apps away from prying eyes, under an additional layer of authentication. The private space uses a separate user profile. The user can choose to use the device lock or a separate lock factor for the private space.

Apps in the private space show up in a separate container in the launcher, and are hidden from the recents view, notifications, settings, and from other apps when the private space is locked. User-generated and downloaded content (such as media or files) and accounts are separated between the private space and the main space. The system sharesheet and the photo picker can be used to give apps access to content across spaces when the private space is unlocked.

Users can't move existing apps and their data into the private space. Instead, users select an install option in the private space to install an app using whichever app store they prefer. Apps in the private space are installed as separate copies from any apps in the main space (new copies of the same app).

When a user locks the private space, the profile is stopped. While the profile is stopped, apps in the private space are no longer active and can't perform foreground or background activities, including showing notifications.

We recommend that you test your app with private space to make sure your app works as expected, especially if your app falls into one of the following categories:

پرس و جو در مورد جدیدترین انتخاب کاربر برای دسترسی به عکس‌های انتخاب شده

برنامه‌ها اکنون می‌توانند تنها عکس‌ها و ویدیوهایی را که اخیراً انتخاب شده‌اند، در صورت اعطای دسترسی جزئی به مجوزهای رسانه، برجسته کنند. این ویژگی می‌تواند تجربه کاربری را برای برنامه‌هایی که اغلب درخواست دسترسی به عکس‌ها و ویدیوها را دارند، بهبود بخشد. برای استفاده از این ویژگی در برنامه خود، هنگام درخواست MediaStore از طریق ContentResolver آرگومان QUERY_ARG_LATEST_SELECTION_ONLY را فعال کنید.

کاتلین

val externalContentUri = MediaStore.Files.getContentUri("external")

val mediaColumns = arrayOf(
   FileColumns._ID,
   FileColumns.DISPLAY_NAME,
   FileColumns.MIME_TYPE,
)

val queryArgs = bundleOf(
   // Return only items from the last selection (selected photos access)
   QUERY_ARG_LATEST_SELECTION_ONLY to true,
   // Sort returned items chronologically based on when they were added to the device's storage
   QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC",
   QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?",
   QUERY_ARG_SQL_SELECTION_ARGS to arrayOf(
       FileColumns.MEDIA_TYPE_IMAGE.toString(),
       FileColumns.MEDIA_TYPE_VIDEO.toString()
   )
)

جاوا

Uri externalContentUri = MediaStore.Files.getContentUri("external");

String[] mediaColumns = {
    FileColumns._ID,
    FileColumns.DISPLAY_NAME,
    FileColumns.MIME_TYPE
};

Bundle queryArgs = new Bundle();
queryArgs.putBoolean(MediaStore.QUERY_ARG_LATEST_SELECTION_ONLY, true);
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SORT_ORDER, FileColumns.DATE_ADDED + " DESC");
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SELECTION, FileColumns.MEDIA_TYPE + " = ? OR " + FileColumns.MEDIA_TYPE + " = ?");
queryArgs.putStringArray(MediaStore.QUERY_ARG_SQL_SELECTION_ARGS, new String[] {
    String.valueOf(FileColumns.MEDIA_TYPE_IMAGE),
    String.valueOf(FileColumns.MEDIA_TYPE_VIDEO)
});

سندباکس حریم خصوصی در اندروید

Android 15 includes the latest Android Ad Services extensions, incorporating the latest version of the Privacy Sandbox on Android. This addition is part of our work to develop technologies that improve user privacy and enable effective, personalized advertising experiences for mobile apps. Our privacy sandbox page has more information about the Privacy Sandbox on Android developer preview and beta programs to help you get started.

ارتباط با سلامت

Android 15 جدیدترین برنامه‌های افزودنی پیرامون Health Connect توسط Android را یکپارچه می‌کند، یک پلتفرم امن و متمرکز برای مدیریت و اشتراک‌گذاری داده‌های سلامت و تناسب اندام جمع‌آوری‌شده توسط برنامه. این به‌روزرسانی از انواع داده‌های اضافی در تناسب اندام ، تغذیه ، دمای پوست، برنامه‌های تمرینی و موارد دیگر پشتیبانی می‌کند.

ردیابی دمای پوست به کاربران این امکان را می دهد که داده های دمایی دقیق تری را از یک دستگاه پوشیدنی یا دستگاه ردیابی دیگر ذخیره و به اشتراک بگذارند.

برنامه های تمرینی برنامه های تمرینی ساختاری برای کمک به کاربر برای دستیابی به اهداف تناسب اندام خود هستند. پشتیبانی برنامه های آموزشی شامل انواع اهداف تکمیل و عملکرد است:

درباره آخرین به‌روزرسانی‌های Health Connect در Android در تجربه‌های سازگار با Android Health از Google I/O در ساختمان، بیشتر بیاموزید.

،

Android 15 جدیدترین برنامه‌های افزودنی پیرامون Health Connect توسط Android را یکپارچه می‌کند، یک پلتفرم امن و متمرکز برای مدیریت و اشتراک‌گذاری داده‌های سلامت و تناسب اندام جمع‌آوری‌شده توسط برنامه. این به‌روزرسانی از انواع داده‌های اضافی در تناسب اندام ، تغذیه ، دمای پوست، برنامه‌های تمرینی و موارد دیگر پشتیبانی می‌کند.

ردیابی دمای پوست به کاربران این امکان را می دهد که داده های دمایی دقیق تری را از یک دستگاه پوشیدنی یا دستگاه ردیابی دیگر ذخیره و به اشتراک بگذارند.

برنامه های تمرینی برنامه های تمرینی ساختاری برای کمک به کاربر برای دستیابی به اهداف تناسب اندام خود هستند. پشتیبانی برنامه های آموزشی شامل انواع اهداف تکمیل و عملکرد است:

درباره آخرین به‌روزرسانی‌های Health Connect در Android در تجربه‌های سازگار با Android Health از Google I/O در ساختمان، بیشتر بیاموزید.

اشتراک گذاری صفحه نمایش برنامه

Android 15 supports app screen sharing so users can share or record just an app window rather than the entire device screen. This feature, first enabled in Android 14 QPR2, includes MediaProjection callbacks that allow your app to customize the app screen sharing experience. Note that for apps targeting Android 14 (API level 34) or higher, user consent is required for each MediaProjection capture session.

تجربه کاربری و رابط کاربری سیستم

اندروید ۱۵ به توسعه‌دهندگان اپلیکیشن و کاربران کنترل و انعطاف‌پذیری بیشتری برای پیکربندی دستگاهشان متناسب با نیازهایشان می‌دهد.

برای کسب اطلاعات بیشتر در مورد نحوه استفاده از آخرین پیشرفت‌ها در اندروید ۱۵ برای بهبود تجربه کاربری برنامه خود، به بخش « بهبود تجربه کاربری برنامه اندروید شما» در کنفرانس Google I/O مراجعه کنید.

پیش‌نمایش‌های غنی‌تر ویجت با رابط برنامه‌نویسی کاربردی پیش‌نمایش‌های تولید شده

قبل از اندروید 15، تنها راه برای ارائه پیش‌نمایش‌های انتخابگر ویجت، تعیین یک تصویر ثابت یا منبع چیدمان بود. این پیش‌نمایش‌ها اغلب با ظاهر ویجت واقعی زمانی که در صفحه اصلی قرار می‌گیرد، تفاوت زیادی دارد. همچنین، منابع ثابت را نمی توان با Jetpack Glance ایجاد کرد، بنابراین یک توسعه دهنده Glance مجبور شد از ویجت خود اسکرین شات بگیرد یا یک طرح XML ایجاد کند تا پیش نمایش ویجت داشته باشد.

اندروید 15 پشتیبانی از پیش نمایش های تولید شده را اضافه می کند. این بدان معنی است که ارائه دهندگان ابزارک برنامه می توانند RemoteViews برای استفاده به عنوان پیش نمایش انتخاب کننده، به جای یک منبع ثابت، تولید کنند.

برنامه‌ها می‌توانند نماهای از راه دور را برای انتخابگر ویجت ارائه کنند، بنابراین می‌توانند محتوای موجود در انتخابگر را به‌روزرسانی کنند تا نمایانگر آنچه کاربر خواهد دید بیشتر باشد.

Push API

برنامه ها می توانند پیش نمایش های تولید شده را از طریق یک push API ارائه دهند. برنامه‌ها می‌توانند پیش‌نمایش‌هایی را در هر مقطعی از چرخه عمر خود ارائه دهند و درخواست صریحی از میزبان برای ارائه پیش‌نمایش دریافت نمی‌کنند. پیش‌نمایش‌ها در AppWidgetService ادامه دارند و میزبان‌ها می‌توانند آن‌ها را بر حسب تقاضا درخواست کنند. مثال زیر یک منبع طرح بندی ویجت XML را بارگیری می کند و آن را به عنوان پیش نمایش تنظیم می کند:

AppWidgetManager.getInstance(appContext).setWidgetPreview(
   ComponentName(
       appContext,
       SociaLiteAppWidgetReceiver::class.java
   ),
   AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
   RemoteViews("com.example", R.layout.widget_preview)
)

جریان مورد انتظار عبارت است از:

  1. در هر زمان، ارائه‌دهنده ویجت با setWidgetPreview تماس می‌گیرد. پیش‌نمایش‌های ارائه‌شده در AppWidgetService با سایر اطلاعات ارائه‌دهنده وجود دارند.
  2. setWidgetPreview از طریق AppWidgetHost.onProvidersChanged ، میزبان ها را از پیش نمایش به روز شده مطلع می کند. در پاسخ، میزبان ویجت تمام اطلاعات ارائه دهنده خود را دوباره بارگیری می کند.
  3. هنگام نمایش یک پیش‌نمایش ویجت، میزبان AppWidgetProviderInfo.generatedPreviewCategories را بررسی می‌کند و اگر دسته انتخابی موجود باشد، AppWidgetManager.getWidgetPreview را برای بازگرداندن پیش‌نمایش ذخیره‌شده برای این ارائه‌دهنده تماس می‌گیرد.

زمان تماس با setWidgetPreview

از آنجایی که هیچ تماسی برای ارائه پیش‌نمایش وجود ندارد، برنامه‌ها می‌توانند در هر زمانی که در حال اجرا هستند، پیش‌نمایش ارسال کنند. هر چند وقت یک‌بار به‌روزرسانی پیش‌نمایش بستگی به مورد استفاده ویجت دارد.

لیست زیر دو دسته اصلی موارد استفاده پیش نمایش را شرح می دهد:

  • ارائه دهندگانی که داده های واقعی را در پیش نمایش ویجت خود نشان می دهند، مانند اطلاعات شخصی یا اخیر. این ارائه دهندگان می توانند پس از ورود کاربر به سیستم یا انجام تنظیمات اولیه در برنامه خود، پیش نمایش را تنظیم کنند. پس از این، آنها می توانند یک کار دوره ای برای به روز رسانی پیش نمایش ها در آهنگ انتخابی خود تنظیم کنند. نمونه هایی از این نوع ویجت می تواند ویجت عکس، تقویم، آب و هوا یا اخبار باشد.
  • ارائه‌دهندگانی که اطلاعات ثابت را در پیش‌نمایش‌ها یا ویجت‌های اقدام سریع که هیچ داده‌ای را نمایش نمی‌دهند نشان می‌دهند. این ارائه دهندگان می توانند یک بار، زمانی که برنامه برای اولین بار راه اندازی می شود، پیش نمایش ها را تنظیم کنند. نمونه هایی از این نوع ویجت شامل ویجت اقدامات سریع درایو یا ویجت میانبرهای کروم است.

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

تصویر در تصویر

اندروید 15 تغییراتی را در Picture-in-Picture (PiP) ارائه می‌کند که هنگام ورود به حالت PiP، انتقال حتی نرم‌تر را تضمین می‌کند. این برای برنامه‌هایی که عناصر UI را در بالای رابط کاربری اصلی خود که به PiP می‌رود، پوشانده شده‌اند، مفید خواهد بود.

توسعه‌دهندگان از پاسخ به تماس onPictureInPictureModeChanged برای تعریف منطقی استفاده می‌کنند که نمایان شدن عناصر رابط کاربری روکش‌شده را تغییر می‌دهد. این تماس پس از تکمیل انیمیشن ورود یا خروج PiP فعال می شود. با شروع اندروید 15، کلاس PictureInPictureUiState شامل حالت دیگری می شود.

با این حالت رابط کاربری، برنامه‌هایی که Android 15 (سطح API 35) را هدف قرار می‌دهند، به محض شروع انیمیشن PiP، پاسخ تماس Activity#onPictureInPictureUiStateChanged را مشاهده می‌کنند که با isTransitioningToPip() فراخوانی می‌شود. بسیاری از عناصر رابط کاربری وجود دارند که زمانی که برنامه در حالت PiP قرار دارد به آن مربوط نیستند، برای مثال نماها یا طرح‌بندی‌هایی که شامل اطلاعاتی مانند پیشنهادها، ویدیوهای آینده، رتبه‌بندی‌ها و عناوین هستند. وقتی برنامه به حالت PiP رفت، از پاسخ تماس onPictureInPictureUiStateChanged برای پنهان کردن این عناصر رابط کاربری استفاده کنید. هنگامی که برنامه از پنجره PiP به حالت تمام صفحه می رود، از onPictureInPictureModeChanged برای باز کردن این عناصر استفاده کنید، همانطور که در مثال های زیر نشان داده شده است:

override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
        if (pipState.isTransitioningToPip()) {
          // Hide UI elements
        }
    }
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
        if (isInPictureInPictureMode) {
          // Unhide UI elements
        }
    }

این تغییر قابلیت مشاهده سریع عناصر رابط کاربری نامربوط (برای یک پنجره PiP) به اطمینان از ورود یک انیمیشن روان‌تر و بدون لرزش PiP کمک می‌کند.

بهبود قوانین «مزاحم نشوید»

AutomaticZenRule lets apps customize Attention Management (Do Not Disturb) rules and decide when to activate or deactivate them. Android 15 greatly enhances these rules with the goal of improving the user experience. The following enhancements are included:

  • Adding types to AutomaticZenRule, allowing the system to apply special treatment to some rules.
  • Adding an icon to AutomaticZenRule, helping to make the modes be more recognizable.
  • Adding a triggerDescription string to AutomaticZenRule that describes the conditions on which the rule should become active for the user.
  • Added ZenDeviceEffects to AutomaticZenRule, allowing rules to trigger things like grayscale display, night mode, or dimming the wallpaper.

تنظیم جلوه لرزشی برای کانال‌های اعلان

Android 15 از تنظیم ارتعاشات غنی برای اعلان‌های دریافتی توسط کانال با استفاده از NotificationChannel.setVibrationEffect پشتیبانی می‌کند، بنابراین کاربران شما می‌توانند بدون نیاز به نگاه کردن به دستگاه خود، بین انواع مختلف اعلان‌ها تمایز قائل شوند.

تراشه نوار وضعیت طرح رسانه و توقف خودکار

Media projection can expose private user information. A new, prominent status bar chip makes users aware of any ongoing screen projection. Users can tap the chip to stop screen casting, sharing, or recording. Also, for a more intuitive user experience, any in‑progress screen projection now automatically stops when the device screen is locked.

تراشه نوار وضعیت برای اشتراک‌گذاری صفحه نمایش، ارسال محتوا و ضبط.

صفحه نمایش‌های بزرگ و فاکتورهای شکل ظاهری

اندروید ۱۵ به برنامه‌های شما این پشتیبانی را می‌دهد تا از فرم فکتورهای اندروید، از جمله صفحه نمایش‌های بزرگ، گوشی‌های تاشو و تاشو، نهایت استفاده را ببرند.

بهبود چندوظیفگی روی صفحه نمایش بزرگ

Android 15 gives users better ways to multitask on large screen devices. For example, users can save their favorite split-screen app combinations for quick access and pin the taskbar on screen to quickly switch between apps. This means that making sure your app is adaptive is more important than ever.

Google I/O has sessions on Building adaptive Android apps and Building UI with the Material 3 adaptive library that can help, and our documentation has more to help you Design for large screens.

پشتیبانی از صفحه نمایش کاور

برنامه شما می‌تواند ویژگی‌ای را اعلام کند که Android 15 از آن استفاده می‌کند تا به Application یا Activity شما اجازه دهد روی صفحه‌نمایش‌های کوچک روی جلد دستگاه‌های قابل انعطاف پشتیبانی‌شده ارائه شود. این صفحه‌ها بسیار کوچک هستند و نمی‌توان آن‌ها را به‌عنوان اهداف سازگار برای اجرای برنامه‌های Android در نظر گرفت، اما برنامه شما می‌تواند از آنها پشتیبانی کند و برنامه شما را در مکان‌های بیشتری در دسترس قرار دهد.

اتصال

اندروید ۱۵ پلتفرم را به‌روزرسانی می‌کند تا به برنامه شما امکان دسترسی به جدیدترین پیشرفت‌ها در فناوری‌های ارتباطی و بی‌سیم را بدهد.

پشتیبانی ماهواره‌ای

Android 15 continues to extend platform support for satellite connectivity and includes some UI elements to ensure a consistent user experience across the satellite connectivity landscape.

Apps can use ServiceState.isUsingNonTerrestrialNetwork() to detect when a device is connected to a satellite, giving them more awareness of why full network services might be unavailable. Additionally, Android 15 provides support for SMS and MMS apps as well as preloaded RCS apps to use satellite connectivity for sending and receiving messages.

A notification appears when the device connects to a satellite.

تجربه روان‌تر NFC

Android 15 در تلاش است تا تجربه پرداخت یکپارچه‌تر و قابل‌اطمینان‌تر را ایجاد کند و در عین حال به پشتیبانی از اکوسیستم قدرتمند برنامه NFC اندروید ادامه دهد. در دستگاه‌های پشتیبانی‌شده، برنامه‌ها می‌توانند از NfcAdapter درخواست کنند تا وارد حالت مشاهده شود، جایی که دستگاه گوش می‌دهد اما به خواننده‌های NFC پاسخ نمی‌دهد و اشیاء PollingFrame سرویس NFC برنامه را برای پردازش ارسال می‌کند. اشیاء PollingFrame را می توان برای احراز هویت قبل از اولین ارتباط با خواننده NFC استفاده کرد که در بسیاری از موارد امکان تراکنش با یک ضربه را فراهم می کند.

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

نقش کیف پول

Android 15 introduces a Wallet role that allows tighter integration with the user's preferred wallet app. This role replaces the NFC default contactless payment setting. Users can manage the Wallet role holder by navigating to Settings > Apps > Default Apps.

The Wallet role is used when routing NFC taps for AIDs registered in the payment category. Taps always go to the Wallet role holder unless another app that is registered for the same AID is running in the foreground.

This role is also used to determine where the Wallet Quick Access tile should go when activated. When the role is set to "None", the Quick Access tile isn't available and payment category NFC taps are only delivered to the foreground app.

امنیت

اندروید ۱۵ به شما کمک می‌کند تا امنیت برنامه خود را افزایش دهید، از داده‌های برنامه خود محافظت کنید و به کاربران شفافیت و کنترل بیشتری بر داده‌هایشان می‌دهد. برای اطلاعات بیشتر در مورد کارهایی که ما برای بهبود حفاظت از کاربر و محافظت از برنامه شما در برابر تهدیدات جدید انجام می‌دهیم، به گفتگوی «حفاظت از امنیت کاربر در اندروید» از Google I/O مراجعه کنید.

ادغام مدیریت اعتبارنامه با تکمیل خودکار

با شروع Android 15، توسعه‌دهندگان می‌توانند نماهای خاصی مانند فیلدهای نام کاربری یا گذرواژه را با درخواست‌های Credential Manager پیوند دهند ، که ارائه یک تجربه کاربری مناسب در طول فرآیند ورود به سیستم را آسان‌تر می‌کند. هنگامی که کاربر روی یکی از این نماها تمرکز می کند، درخواست مربوطه به Credential Manager ارسال می شود. اعتبارنامه‌های به‌دست‌آمده در بین ارائه‌دهندگان جمع‌آوری می‌شوند و در رابط‌های کاربری جایگزین تکمیل خودکار، مانند پیشنهادات درون خطی یا پیشنهادات کشویی نمایش داده می‌شوند. کتابخانه Jetpack androidx.credentials نقطه پایانی ترجیحی برای استفاده توسعه دهندگان است و به زودی برای بهبود بیشتر این ویژگی در اندروید 15 و بالاتر در دسترس خواهد بود.

ثبت نام و ورود با یک لمس را با درخواست‌های بیومتریک ادغام کنید

Credential Manager اعلان‌های بیومتریک را در فرآیندهای ایجاد اعتبار و ورود به سیستم ادغام می‌کند و نیاز ارائه‌دهندگان را برای مدیریت درخواست‌های بیومتریک از بین می‌برد. در نتیجه، ارائه دهندگان اعتبار فقط باید بر نتایج ایجاد و دریافت جریان ها، به همراه نتیجه جریان بیومتریک تمرکز کنند. این فرآیند ساده، فرآیند ایجاد و بازیابی اعتبار کارآمدتر و کارآمدتر را ایجاد می کند.

مدیریت کلید برای رمزگذاری سرتاسری

ما E2eeContactKeysManager را در اندروید 15 معرفی می کنیم که رمزگذاری سرتاسر (E2EE) را در برنامه های اندرویدی شما با ارائه یک API در سطح سیستم عامل برای ذخیره کلیدهای عمومی رمزنگاری تسهیل می کند.

E2eeContactKeysManager برای ادغام با برنامه مخاطبین پلتفرم طراحی شده است تا به کاربران راهی متمرکز برای مدیریت و تأیید کلیدهای عمومی مخاطبینشان بدهد.

بررسی مجوزها روی URIهای محتوا

Android 15 introduces a set of APIs that perform permission checks on content URIs:

دسترسی‌پذیری

اندروید ۱۵ ویژگی‌هایی را اضافه می‌کند که دسترسی کاربران را بهبود می‌بخشد.

بریل بهتر

در Android 15، ما این امکان را برای TalkBack فراهم کرده‌ایم که از نمایشگرهای بریل که از استاندارد HID از طریق USB و بلوتوث ایمن استفاده می‌کنند، پشتیبانی کند.

این استاندارد، دقیقاً مشابه استانداردی که توسط ماوس ها و صفحه کلیدها استفاده می شود، به اندروید کمک می کند تا در طول زمان از طیف وسیع تری از نمایشگرهای بریل پشتیبانی کند.

بین‌المللی‌سازی

اندروید ۱۵ ویژگی‌ها و قابلیت‌هایی را اضافه می‌کند که هنگام استفاده از دستگاه به زبان‌های مختلف، تجربه کاربری را تکمیل می‌کنند.

فونت متغیر CJK

Starting with Android 15, the font file for Chinese, Japanese, and Korean (CJK) languages, NotoSansCJK, is now a variable font. Variable fonts open up possibilities for creative typography in CJK languages. Designers can explore a broader range of styles and create visually striking layouts that were previously difficult or impossible to achieve.

How the variable font for Chinese, Japanese, and Korean (CJK) languages appears with different font widths.

توجیه بین کاراکتری

Starting with Android 15, text can be justified utilizing letter spacing by using JUSTIFICATION_MODE_INTER_CHARACTER. Inter-word justification was first introduced in Android 8.0 (API level 26), and inter-character justification provides similar capabilities for languages that use the whitespace character for segmentation, such as Chinese, Japanese, and others.

Layout for Japanese text using JUSTIFICATION_MODE_NONE.
Layout for English text using JUSTIFICATION_MODE_NONE.


Layout for Japanese text using JUSTIFICATION_MODE_INTER_WORD.
Layout for English text using JUSTIFICATION_MODE_INTER_WORD.


Layout for Japanese text using the JUSTIFICATION_MODE_INTER_CHARACTER.
Layout for English text using the JUSTIFICATION_MODE_INTER_CHARACTER.

پیکربندی خودکار شکستن خط

Android شروع به پشتیبانی از شکستن خطوط مبتنی بر عبارت برای ژاپنی و کره ای در Android 13 (سطح API 33) کرد. با این حال، در حالی که شکستن خطوط مبتنی بر عبارت، خوانایی خطوط کوتاه متن را بهبود می بخشد، برای خطوط طولانی متن خوب کار نمی کند. در Android 15، برنامه‌ها می‌توانند با استفاده از گزینه LINE_BREAK_WORD_STYLE_AUTO ، شکست خط‌های مبتنی بر عبارت را فقط برای خطوط کوتاه متن اعمال کنند. این گزینه بهترین گزینه سبک کلمه را برای متن انتخاب می کند.

برای خطوط کوتاه متن، از شکسته‌های خط مبتنی بر عبارت استفاده می‌شود که مانند LINE_BREAK_WORD_STYLE_PHRASE عمل می‌کند، همانطور که در تصویر زیر نشان داده شده است:

برای خطوط کوتاه متن، LINE_BREAK_WORD_STYLE_AUTO برای بهبود خوانایی متن، شکستگی های خطی مبتنی بر عبارت را اعمال می کند. این مانند اعمال LINE_BREAK_WORD_STYLE_PHRASE است.

برای خطوط طولانی‌تر متن، LINE_BREAK_WORD_STYLE_AUTO از سبک کلمه بدون خط‌شکن استفاده می‌کند، مانند LINE_BREAK_WORD_STYLE_NONE ، همانطور که در تصویر زیر نشان داده شده است:

برای سطرهای طولانی متن، LINE_BREAK_WORD_STYLE_AUTO برای بهبود خوانایی متن، از سبک کلمه شکسته استفاده نمی کند. این مانند اعمال LINE_BREAK_WORD_STYLE_NONE است.

فونت اضافی Hentaigana ژاپنی

در اندروید 15، یک فایل فونت برای هیراگانای ژاپنی قدیمی (معروف به Hentaigana) به طور پیش فرض همراه است. اشکال منحصربه‌فرد شخصیت‌های هنتایگانا می‌تواند استعدادی متمایز به آثار هنری یا طراحی اضافه کند و در عین حال به حفظ انتقال دقیق و درک اسناد باستانی ژاپنی کمک کند.

کاراکتر و سبک متن برای فونت ژاپنی Hentaigana.

مخروط VideoLAN حق چاپ (ج) 1996-2010 VideoLAN. این لوگو یا نسخه اصلاح شده ممکن است توسط هر کسی برای ارجاع به پروژه VideoLAN یا هر محصولی که توسط تیم VideoLAN توسعه داده شده است استفاده یا اصلاح شود، اما نشان دهنده تایید پروژه نیست.

Vulkan و لوگوی Vulkan علائم تجاری ثبت شده شرکت Khronos Group هستند.

OpenGL یک علامت تجاری ثبت شده است و لوگوی OpenGL ES یک علامت تجاری Hewlett Packard Enterprise است که با مجوز Khronos استفاده می شود.