اندروید 15 ویژگی ها و API های عالی را برای توسعه دهندگان معرفی می کند. بخشهای زیر این ویژگیها را خلاصه میکنند تا به شما در شروع کار با APIهای مرتبط کمک کنند.
برای فهرست دقیق APIهای اضافه شده، اصلاح شده و حذف شده، گزارش تفاوت API را بخوانید. برای جزئیات بیشتر در مورد APIهای اضافه شده به مرجع Android API مراجعه کنید — برای Android 15، به دنبال APIهایی باشید که در سطح API 35 اضافه شده اند. برای اطلاع از مناطقی که تغییرات پلت فرم ممکن است بر برنامه های شما تأثیر بگذارد، حتماً تغییرات رفتار Android 15 را برای برنامه هایی که اندروید 15 و برای همه برنامه ها را هدف قرار دهید.
دوربین و رسانه
اندروید 15 شامل ویژگیهای مختلفی است که تجربه دوربین و رسانه را بهبود میبخشد و به شما امکان میدهد به ابزارها و سختافزارهایی برای حمایت از سازندگان برای زنده کردن دیدگاهشان در اندروید دسترسی داشته باشید.
برای اطلاعات بیشتر در مورد جدیدترین ویژگیها و راهحلهای برنامهنویس برای رسانه و دوربین Android، به بحث ساخت رسانهها و تجربههای دوربین مدرن Android از Google I/O مراجعه کنید.
تقویت نور کم
اندروید 15 کم نور ، حالت نوردهی خودکار را معرفی می کند که هم برای دوربین 2 و هم برای پسوند دوربین حالت شب در دسترس است. Low Light Boost نوردهی جریان پیش نمایش را در شرایط کم نور تنظیم می کند. این با نحوه ایجاد تصاویر ثابت توسط پسوند دوربین حالت شب متفاوت است، زیرا حالت شب مجموعه ای از عکس ها را برای ایجاد یک تصویر واحد و پیشرفته ترکیب می کند. در حالی که حالت شب برای ایجاد یک تصویر ثابت بسیار خوب عمل می کند، نمی تواند یک جریان مداوم از فریم ها ایجاد کند، اما Low Light Boost می تواند. بنابراین، Low Light Boost قابلیت های دوربین را فعال می کند، مانند:
- ارائه یک پیشنمایش تصویر پیشرفته، بنابراین کاربران بهتر میتوانند عکسهای خود را در نور کم قاب کنند
- اسکن کدهای QR در نور کم
اگر Low Light Boost را فعال کنید، هنگامی که سطح نور کم باشد به طور خودکار روشن می شود و زمانی که نور بیشتر باشد خاموش می شود.
برنامهها میتوانند جریان پیشنمایش را در شرایط کمنور ضبط کنند تا یک ویدیوی روشن را ذخیره کنند.
برای اطلاعات بیشتر، Low Light Boost را ببینید.
کنترل های دوربین درون برنامه ای
اندروید 15 یک افزونه برای کنترل بیشتر بر سخت افزار دوربین و الگوریتم های آن در دستگاه های پشتیبانی شده اضافه می کند:
- تنظیمات پیشرفته قدرت فلاش که امکان کنترل دقیق شدت فلاش را در هر دو حالت
SINGLE
وTORCH
در هنگام ثبت تصاویر فراهم می کند.
کنترل فضای سر HDR
Android 15 会选择适合底层设备功能和面板的位深的 HDR 余量。对于包含大量 SDR 内容的页面(例如显示单个 HDR 缩略图的即时通讯应用),此行为最终可能会对 SDR 内容的感知亮度产生不利影响。Android 15 允许您使用 setDesiredHdrHeadroom
控制 HDR 余量,以在 SDR 和 HDR 内容之间取得平衡。
کنترل بلندی صدا
اندروید 15 از استاندارد بلندی صدای CTA-2075 پشتیبانی می کند تا به شما کمک کند از تناقضات بلندی صدا جلوگیری کنید و اطمینان حاصل کنید که کاربران مجبور نیستند به طور مداوم صدا را هنگام جابجایی بین محتوا تنظیم کنند. این سیستم از ویژگی های شناخته شده دستگاه های خروجی (هدفون و بلندگو) به همراه ابرداده بلندی صدای موجود در محتوای صوتی AAC استفاده می کند تا به طور هوشمندانه میزان بلندی صدا و تراکم دامنه پویا را تنظیم کند.
برای فعال کردن این ویژگی، باید مطمئن شوید که ابرداده بلندی صدا در محتوای AAC شما موجود است و ویژگی پلتفرم را در برنامه خود فعال کنید. برای این کار ، شما با فراخوانی روش ایجاد کارخانه با شناسه جلسه صوتی از AudioTrack
مرتبط ، یک شیء LoudnessCodecController
را فوری می کنید. این به طور خودکار شروع به اعمال به روز رسانی های صوتی می کند. می توانید یک OnLoudnessCodecUpdateListener
را برای اصلاح یا فیلتر کردن پارامترهای بلندی صدا قبل از اعمال آنها در 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 همچنین برای استفاده از API های LoudnessCodecController
برای یکپارچه سازی یکپارچه برنامه به روز می شود.
دستگاه های مجازی MIDI 2.0
Android 13 添加了对使用 USB 连接到 MIDI 2.0 设备的支持,USB 使用通用 MIDI 数据包 (UMP) 进行通信。Android 15 扩展了对虚拟 MIDI 应用的 UMP 支持,使合成器应用能够像对待 USB MIDI 2.0 设备一样将合成器应用作为虚拟 MIDI 2.0 设备进行控制。
رمزگشایی نرم افزار AV1 کارآمدتر
dav1d ، رمزگشای محبوب نرم افزار AV1 از VideoLAN برای دستگاه های اندرویدی که از رمزگشایی AV1 در سخت افزار پشتیبانی نمی کنند، در دسترس است. عملکرد dav1d تا 3 برابر بیشتر از رمزگشای نرمافزار AV1 قدیمی است و امکان پخش HD AV1 را برای کاربران بیشتری از جمله برخی دستگاههای سطح پایین و متوسط فراهم میکند.
برنامه شما باید با فراخوانی آن با نام "c2.android.av1-dav1d.decoder"
استفاده از dav1d را انتخاب کند. dav1d در به روز رسانی بعدی به عنوان رمزگشای پیش فرض نرم افزار AV1 تبدیل خواهد شد. این پشتیبانی استاندارد شده و برای دستگاههای Android 11 که بهروزرسانیهای سیستم Google Play را دریافت میکنند، پشتیبانی میشود.
بهره وری توسعه دهندگان و ابزار
در حالی که بیشتر کار ما برای بهبود بهرهوری شما حول ابزارهایی مانند Android Studio ، Jetpack Compose ، و کتابخانههای Android Jetpack متمرکز است، ما همیشه به دنبال راههایی در این پلتفرم هستیم تا به شما کمک کند راحتتر به دیدگاه خود پی ببرید.
به روز رسانی OpenJDK 17
اندروید 15 به کار تازه سازی کتابخانه های اصلی اندروید برای هماهنگی با ویژگی های آخرین نسخه OpenJDK LTS ادامه می دهد.
ویژگیها و بهبودهای کلیدی زیر شامل میشوند:
- بهبود کیفیت زندگی در اطراف بافرهای NIO
- جریان ها
- روشهای اضافی
math
وstrictmath
-
util
بسته شاملcollection
متوالی،map
وset
- پشتیبانی
ByteBuffer
درDeflater
- به روز رسانی های امنیتی مانند
X500PrivateCredential
و به روز رسانی های کلید امنیتی
این APIها در بیش از یک میلیارد دستگاه دارای Android 12 (سطح API 31) و بالاتر از طریق بهروزرسانیهای سیستم Google Play بهروزرسانی میشوند، بنابراین میتوانید آخرین ویژگیهای برنامهنویسی را هدف قرار دهید.
پیشرفت های PDF
اندروید 15 شامل بهبودهای قابل توجهی در APIهای PdfRenderer
است. برنامهها میتوانند ویژگیهای پیشرفتهای مانند ارائه فایلهای محافظتشده با رمز عبور ، حاشیهنویسی، ویرایش فرم ، جستجو و انتخاب با کپی را در خود جای دهند. بهینه سازی خطی PDF برای سرعت بخشیدن به مشاهده PDF محلی و کاهش استفاده از منابع پشتیبانی می شود. کتابخانه PDF Jetpack از این APIها برای ساده کردن افزودن قابلیت مشاهده PDF به برنامه شما استفاده می کند.
PdfRenderer
به ماژولی منتقل شده است که میتواند با استفاده از بهروزرسانیهای سیستم Google Play مستقل از نسخه پلتفرم بهروزرسانی شود، و ما با ایجاد یک نسخه سازگار پیش از Android 15 از این تغییرات به Android 11 (سطح API 30) پشتیبانی میکنیم. سطح API، به نام PdfRendererPreV
.
اصلاحات تغییر خودکار زبان
Android 14 增加了设备端音频中的多语言识别功能,可在语言之间自动切换,但这可能会导致单词丢失,尤其是在语言切换时,两种话语之间的停顿较少时。Android 15 添加了额外的控件,可帮助应用根据其用例调整此切换。EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS
会将自动切换限制为仅在音频会话开始时进行,而 EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES
则会在指定次数的切换后停用语言切换。如果您希望自动检测到会话期间只讲一种语言,这些选项特别有用。
API فونت متغیر 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های قدیمی و جدید آورده شده است:
در این مثال، Typeface
ایجاد شده با API قدیمی توانایی ایجاد وزن فونت های دقیق برای نمونه های Font
350، 450، 550 و 650 را ندارد، بنابراین رندر به نزدیک ترین وزن باز می گردد. بنابراین در این حالت به جای 350 عدد 300 و به جای 450 عدد 400 و به همین ترتیب رندر می شود. در مقابل، Typeface
ایجاد شده با APIهای جدید به صورت پویا یک نمونه Font
برای وزن مشخص ایجاد می کند، بنابراین وزن های دقیق برای 350، 450، 550 و 650 نیز ارائه می شود.
کنترل های شکست خط دانه ای
با شروع در اندروید 15، یک TextView
و خط شکن زیرین میتوانند بخش داده شده از متن را در همان خط حفظ کنند تا خوانایی را بهبود بخشند. شما می توانید با استفاده از تگ <nobreak>
در منابع رشته یا createNoBreakSpan
از این سفارشی سازی خط شکن استفاده کنید. به طور مشابه، میتوانید با استفاده از تگ <nohyphen>
یا createNoHyphenationSpan
، کلمات را از خط فاصله حفظ کنید.
به عنوان مثال، منبع رشته زیر شامل یک خط شکسته نمیشود و با متن «Pixel 8 Pro» رندر میشود. شکستن در محل نامطلوب:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
در مقابل، این منبع رشته شامل تگ <nobreak>
است که عبارت "Pixel 8 Pro" را میپیچد. و از شکستگی خطوط جلوگیری می کند:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
تفاوت در نحوه رندر شدن این رشته ها در تصاویر زیر نشان داده شده است:
بایگانی برنامه
Android و Google Play سال گذشته پشتیبانی از بایگانی برنامه را اعلام کردند و به کاربران این امکان را داد تا با حذف بخشی از برنامههای کم استفاده از دستگاه که با استفاده از Android App Bundle در Google Play منتشر شدهاند، فضا را آزاد کنند. اندروید 15 شامل پشتیبانی سطح سیستم عامل برای بایگانی و حذف بایگانی برنامه است که اجرای آن را برای همه فروشگاه های برنامه آسان تر می کند.
برنامههای دارای مجوز REQUEST_DELETE_PACKAGES
میتوانند با روش PackageInstaller
requestArchive
تماس بگیرند تا بایگانی یک بسته برنامه نصبشده را درخواست کنند، که APK و هر فایل حافظه پنهان را حذف میکند، اما دادههای کاربر را حفظ میکند. برنامه های آرشیو شده به عنوان برنامه های قابل نمایش از طریق API های LauncherApps
برگردانده می شوند. کاربران برای برجسته کردن آرشیو بودن آن برنامه ها، یک رابط کاربری را مشاهده خواهند کرد. اگر کاربر روی یک برنامه بایگانی شده ضربه بزند، نصب کننده مسئول درخواستی برای حذف بایگانی آن دریافت می کند و فرآیند بازیابی می تواند توسط پخش ACTION_PACKAGE_ADDED
نظارت شود.
گرافیک
اندروید 15 جدیدترین پیشرفتهای گرافیکی، از جمله ANGLE و اضافهشدهها به سیستم گرافیکی Canvas را به ارمغان میآورد.
مدرن کردن دسترسی به پردازنده گرافیکی اندروید
从早期开始,核心操作系统在单个 CPU 上运行,GPU 通过基于固定函数流水线的 API 进行访问,Android 硬件已经发生了很大变化。从 Android 7.0(API 级别 24)开始,NDK 中就已提供 Vulkan® 图形 API。它采用较低级别的抽象,可以更好地反映现代 GPU 硬件,能够更好地进行扩展以支持多个 CPU 核心,并可减少 CPU 驱动程序开销,从而提升应用性能。所有现代游戏引擎都支持 Vulkan。
Vulkan 是 Android 的 GPU 首选接口。因此,Android 15 包含 ANGLE 作为可选层,用于在 Vulkan 上运行 OpenGL® ES。迁移到 ANGLE 会将 Android OpenGL 实现标准化,以提高兼容性,在某些情况下还可提升性能。您可以使用 ANGLE 测试 OpenGL ES 应用的稳定性和性能,方法是在 Android 15 上依次点击设置 -> 系统 -> 开发者选项 -> 实验性功能:启用 ANGLE,启用开发者选项。
Vulkan 上的 Android ANGLE 路线图
作为简化 GPU 堆栈的一部分,今后我们将在更多新设备上以 GL 系统驱动程序的形式提供 ANGLE,预计未来将只能通过 ANGLE 使用 OpenGL/ES。不过,我们计划在所有设备上继续支持 OpenGL ES。
建议的后续措施
使用开发者选项选择适用于 OpenGL ES 的 ANGLE 驱动程序并测试您的应用。对于新项目,我们强烈建议您使用适用于 C/C++ 的 Vulkan。
بهبودهایی برای بوم
اندروید 15 به مدرن سازی سیستم گرافیکی Canvas اندروید با قابلیت های اضافی ادامه می دهد:
-
Matrix44
یک ماتریس 4x4 برای تبدیل مختصات ارائه می دهد که باید برای دستکاری بوم به صورت سه بعدی استفاده شود. -
clipShader
کلیپ فعلی را با سایهزن مشخص شده قطع میکند، در حالی کهclipOutShader
کلیپ را روی تفاوت کلیپ فعلی و سایهزن تنظیم میکند و هر کدام سایهزن را به عنوان یک ماسک آلفا در نظر میگیرند. این از ترسیم اشکال پیچیده به طور موثر پشتیبانی می کند.
عملکرد و باتری
Android به تمرکز خود بر کمک به شما در بهبود عملکرد و کیفیت برنامههایتان ادامه میدهد. Android 15 API هایی را معرفی می کند که به کارآمدتر کردن وظایف در برنامه شما برای اجرا، بهینه سازی عملکرد برنامه و جمع آوری اطلاعات بینش در مورد برنامه های شما کمک می کند.
برای بهترین روشهای کارآمد باتری، اشکالزدایی شبکه و مصرف انرژی، و جزئیات نحوه بهبود کارایی باتری در کار پسزمینه در Android 15 و نسخههای اخیر Android، به بهبود کارایی باتری کار پسزمینه در بحث Android از Google I/ مراجعه کنید. O.
ApplicationStartInfo API
在以前的 Android 版本中,应用启动有点神秘。在应用中确定应用是从冷状态、温状态还是热状态开始的过程很难确定。此外,我们也很难知道您的应用在不同发布阶段所用的时间:创建进程分支、调用 onCreate
、绘制第一帧等。在实例化 Application
类时,您无法得知应用是从广播、content provider、作业、备份、启动完成、闹钟还是 Activity
启动的。
Android 15 上的 ApplicationStartInfo
API 可提供所有这些功能以及更多其他功能。您甚至可以选择将自己的时间戳添加到流程中,以便在一个位置收集时间数据。除了收集指标之外,您还可以使用 ApplicationStartInfo
直接优化应用启动;例如,当应用因广播而启动时,您可以避免在 Application
类中实例化界面相关库的高成本。
اطلاعات دقیق اندازه برنامه
自 Android 8.0(API 级别 26)起,Android 就一直包含 StorageStats.getAppBytes
API,该 API 将应用的安装大小汇总为一个字节,这些字节是 APK 大小、从 APK 中提取的文件的大小以及设备上生成的文件(例如预先 (AOT) 编译代码)的总和。就应用的存储空间使用情况而言,此数字并不富有见解。
Android 15 增加了 StorageStats.getAppBytesByDataType([type])
API,可让您深入了解应用如何使用所有空间,包括 APK 文件拆分、AOT 和加速相关代码、dex 元数据、库和引导式配置文件。
پروفایل مدیریت شده توسط برنامه
Android 15 شامل کلاس ProfilingManager
است که به شما امکان می دهد اطلاعات پروفایل را از داخل برنامه خود جمع آوری کنید. ما قصد داریم این را با یک API Android Jetpack بپوشانیم که ساخت درخواستهای پروفایل را سادهتر میکند، اما API اصلی امکان جمعآوری heap dumps، heap profiles، stack sampling و موارد دیگر را فراهم میکند. این یک تگ ارائه شده برای شناسایی فایل خروجی که به دایرکتوری فایل های برنامه شما تحویل داده می شود، به برنامه شما پاسخ تماس می دهد. API برای به حداقل رساندن تأثیر عملکرد، نرخ را محدود می کند.
بهبود پایگاه داده SQLite
اندروید 15 APIهای SQLite را معرفی میکند که ویژگیهای پیشرفتهای را از موتور اصلی SQLite نشان میدهد که مشکلات عملکرد خاصی را که میتواند در برنامهها آشکار شود را هدف قرار میدهد.
توسعه دهندگان باید از بهترین شیوه ها برای عملکرد SQLite استفاده کنند تا بیشترین بهره را از پایگاه داده SQLite خود ببرند، به ویژه هنگام کار با پایگاه داده های بزرگ یا هنگام اجرای پرس و جوهای حساس به تأخیر.
- تراکنشهای معوق فقط خواندنی : هنگام صدور تراکنشهایی که فقط خواندنی هستند (شرایط نوشتن را شامل نمیشود)، از
beginTransactionReadOnly()
وbeginTransactionWithListenerReadOnly(SQLiteTransactionListener)
برای صدور تراکنشهایDEFERRED
فقط خواندنی استفاده کنید. چنین تراکنش هایی می توانند همزمان با یکدیگر اجرا شوند و اگر پایگاه داده در حالت WAL باشد، می توانند همزمان با تراکنش هایIMMEDIATE
یاEXCLUSIVE
اجرا شوند. - تعداد ردیف ها و شناسه ها : API ها برای بازیابی تعداد ردیف های تغییر یافته یا آخرین شناسه ردیف درج شده بدون ارسال درخواست اضافی اضافه شدند.
getLastChangedRowCount()
تعداد ردیفهایی را که توسط آخرین دستور SQL در تراکنش جاری درج، بهروزرسانی یا حذف شدهاند را برمیگرداند، در حالی کهgetTotalChangedRowCount()
تعداد اتصال فعلی را برمیگرداند.getLastInsertRowId()
rowid
آخرین ردیفی که باید در اتصال فعلی درج شود را برمی گرداند. - بیانیههای خام : یک بیانیه خام SQlite صادر کنید، با دور زدن بستهبندیهای راحت و هر سربار پردازش اضافی که ممکن است متحمل شوند.
بهروزرسانیهای چارچوب عملکرد پویا اندروید
Android 15 به سرمایه گذاری ما در Android Dynamic Performance Framework (ADPF) ادامه می دهد، مجموعه ای از API ها که به بازی ها و برنامه های فشرده عملکرد اجازه می دهد تا به طور مستقیم با سیستم های قدرت و حرارت دستگاه های Android ارتباط برقرار کنند. در دستگاههای پشتیبانیشده، Android 15 قابلیتهای ADPF را اضافه میکند:
- یک حالت بهره وری انرژی برای جلسات راهنمایی که نشان می دهد رشته های مرتبط آنها باید صرفه جویی در مصرف انرژی را به عملکرد ترجیح دهند، که برای بارهای کاری پس زمینه طولانی مدت عالی است.
- مدت زمان کار GPU و CPU را می توان هر دو در جلسات راهنمایی گزارش کرد و به سیستم اجازه می دهد فرکانس های CPU و GPU را با هم تنظیم کند تا به بهترین شکل نیازهای بار کاری را برآورده کند.
- آستانههای دمایی برای تفسیر وضعیت احتمالی درگیری حرارتی بر اساس پیشبینی فضای سر.
برای کسب اطلاعات بیشتر در مورد نحوه استفاده از ADPF در برنامه ها و بازی های خود، به مستندات مراجعه کنید .
حریم خصوصی
اندروید 15 دارای ویژگی های مختلفی است که به توسعه دهندگان اپلیکیشن کمک می کند تا از حریم خصوصی کاربران محافظت کنند.
تشخیص ضبط صفحه
اندروید 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>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:domain="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>
فضای خصوصی
فضای خصوصی به کاربران این امکان را می دهد که فضای جداگانه ای در دستگاه خود ایجاد کنند که در آن می توانند برنامه های حساس را از چشمان کنجکاو دور نگه دارند، زیر یک لایه دیگر از احراز هویت. فضای خصوصی از یک پروفایل کاربری مجزا استفاده می کند. کاربر می تواند انتخاب کند که از قفل دستگاه یا فاکتور قفل جداگانه برای فضای خصوصی استفاده کند.
برنامههای موجود در فضای خصوصی در یک محفظه جداگانه در راهانداز نمایش داده میشوند و وقتی فضای خصوصی قفل است از نمای اخیر، اعلانها، تنظیمات و از سایر برنامهها پنهان میشوند. محتوای تولید شده و دانلود شده توسط کاربر (مانند رسانه یا فایل ها) و حساب ها بین فضای خصوصی و فضای اصلی جدا می شوند. از اشتراکگذاری سیستم و انتخابگر عکس میتوان برای دسترسی برنامهها به محتوا در فضاهای مختلف زمانی که فضای خصوصی باز است استفاده کرد.
کاربران نمی توانند برنامه های موجود و داده های آنها را به فضای خصوصی منتقل کنند. در عوض، کاربران یک گزینه نصب را در فضای خصوصی برای نصب یک برنامه با استفاده از فروشگاه برنامه ای که ترجیح می دهند انتخاب می کنند. برنامههای موجود در فضای خصوصی بهعنوان نسخههای جداگانه از هر برنامهای در فضای اصلی (کپیهای جدید همان برنامه) نصب میشوند.
وقتی کاربر فضای خصوصی را قفل می کند، نمایه متوقف می شود. وقتی نمایه متوقف شده است، برنامههای موجود در فضای خصوصی دیگر فعال نیستند و نمیتوانند فعالیتهای پیشزمینه یا پسزمینه، از جمله نمایش اعلانها را انجام دهند.
توصیه می کنیم برنامه خود را با فضای خصوصی آزمایش کنید تا مطمئن شوید برنامه شما همانطور که انتظار می رود کار می کند، به خصوص اگر برنامه شما در یکی از دسته های زیر قرار می گیرد:
- برنامههایی با منطق برای نمایههای کاری که فرض میکنند هر نسخه نصبشده برنامهشان که در نمایه اصلی نیست، در نمایه کاری است.
- اپلیکیشن های پزشکی
- برنامه های راه اندازی
- اپلیکیشن های اپ استور
آخرین انتخاب کاربر را برای دسترسی به عکسهای انتخابی جستجو کنید
برنامهها اکنون میتوانند تنها عکسها و ویدیوهایی را که اخیراً انتخاب شدهاند، در صورت اعطای دسترسی جزئی به مجوزهای رسانه، برجسته کنند. این ویژگی میتواند تجربه کاربری را برای برنامههایی که اغلب درخواست دسترسی به عکسها و ویدیوها را دارند، بهبود بخشد. برای استفاده از این ویژگی در برنامه خود، هنگام درخواست 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 شامل جدیدترین برنامههای افزودنی Android Ad Services است که جدیدترین نسخه جعبه ایمنی حریم خصوصی در Android را در خود جای داده است. این افزوده بخشی از کار ما برای توسعه فناوریهایی است که حریم خصوصی کاربر را بهبود میبخشد و تجربههای تبلیغاتی شخصی و مؤثر را برای برنامههای تلفن همراه امکانپذیر میسازد. صفحه جعبه ایمنی حریم خصوصی ما اطلاعات بیشتری درباره Privacy Sandbox در برنامههای پیشنمایش برنامهنویس Android و بتا دارد تا به شما در شروع کار کمک کند.
Health Connect
Android 15 جدیدترین برنامههای افزودنی پیرامون Health Connect توسط Android را یکپارچه میکند، یک پلتفرم امن و متمرکز برای مدیریت و اشتراکگذاری دادههای سلامت و تناسب اندام جمعآوریشده توسط برنامه. این بهروزرسانی از انواع دادههای اضافی در تناسب اندام ، تغذیه ، دمای پوست، برنامههای تمرینی و موارد دیگر پشتیبانی میکند.
ردیابی دمای پوست به کاربران این امکان را می دهد که داده های دمایی دقیق تری را از یک دستگاه پوشیدنی یا دستگاه ردیابی دیگر ذخیره و به اشتراک بگذارند.
برنامه های تمرینی برنامه های تمرینی ساختاری برای کمک به کاربر برای دستیابی به اهداف تناسب اندام خود هستند. پشتیبانی برنامه های آموزشی شامل انواع اهداف تکمیل و عملکرد است:
- اهداف تکمیل در مورد کالری سوزانده شده ، مسافت ، مدت زمان ، تکرار ، و مراحل .
- اهداف عملکردی حول هرچه بیشتر تکرارها (AMRAP) ، آهنگ ، ضربان قلب ، قدرت ، میزان تلاش درک شده و سرعت .
درباره آخرین بهروزرسانیهای Health Connect در Android در تجربههای سازگار با Android Health از Google I/O در ساختمان، بیشتر بیاموزید.
اشتراک گذاری جزئی صفحه نمایش
اندروید 15 از اشتراکگذاری جزئی صفحه پشتیبانی میکند تا کاربران بتوانند تنها یک پنجره برنامه را بهجای کل صفحه دستگاه به اشتراک بگذارند یا ضبط کنند. این ویژگی که برای اولین بار در Android 14 QPR2 فعال شد، شامل تماسهای MediaProjection
است که به برنامه شما اجازه میدهد تا تجربه اشتراکگذاری جزئی صفحه را سفارشی کند. توجه داشته باشید که برای برنامههایی که Android 14 (سطح API 34) یا بالاتر را هدف قرار میدهند، رضایت کاربر برای هر جلسه ضبط MediaProjection
لازم است.
تجربه کاربری و رابط کاربری سیستم
اندروید 15 به توسعه دهندگان و کاربران برنامه کنترل و انعطاف بیشتری را برای پیکربندی دستگاه خود مطابق با نیازهایشان می دهد.
برای کسب اطلاعات بیشتر در مورد نحوه استفاده از آخرین پیشرفتها در Android 15 برای بهبود تجربه کاربری برنامه، به بحث بهبود تجربه کاربری برنامه Android خود از Google I/O مراجعه کنید.
پیشنمایشهای غنیتر ویجت با Generated Previews API
قبل از اندروید 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)
)
جریان مورد انتظار عبارت است از:
- در هر زمان، ارائهدهنده ویجت با
setWidgetPreview
تماس میگیرد. پیشنمایشهای ارائهشده درAppWidgetService
با سایر اطلاعات ارائهدهنده وجود دارند. -
setWidgetPreview
از طریقAppWidgetHost.onProvidersChanged
، میزبان ها را از پیش نمایش به روز شده مطلع می کند. در پاسخ، میزبان ویجت تمام اطلاعات ارائه دهنده خود را دوباره بارگیری می کند. - هنگام نمایش یک پیشنمایش ویجت، میزبان
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
允许应用自定义注意力机制
管理(勿扰)规则,并确定何时启用或停用
。Android 15 极大地增强了这些规则,旨在提高
用户体验。其中包含以下增强功能:
- 向
AutomaticZenRule
添加类型,让系统能够应用特殊类型 对某些规则的处理 - 向
AutomaticZenRule
添加图标,使模式更加丰富 易于识别。 - 将
triggerDescription
字符串添加到AutomaticZenRule
,用于描述 规则应当对用户生效的条件。 - 已添加
ZenDeviceEffects
更改为AutomaticZenRule
,从而允许规则触发灰度等操作 显示、夜间模式或调暗壁纸。
VibrationEffect را برای کانال های اعلان تنظیم کنید
Android 15 支持为传入的通知设置丰富的振动,方法是
频道使用的是NotificationChannel.setVibrationEffect
,因此
您的用户可以区分不同类型的通知
不需要看他们的设备
صفحه نمایش های بزرگ و عوامل شکل
Android 15 به برنامههای شما پشتیبانی میکند تا از فاکتورهای فرم اندروید، از جمله صفحهنمایشهای بزرگ، قابلیتهای تاشو، و تاشو نهایت استفاده را ببرند.
چندوظیفه ای با صفحه نمایش بزرگ بهبود یافته است
Android 15 为用户提供了在大屏设备上更好地进行多任务处理的方式。对于 例如,用户可以保存自己喜爱的分屏应用组合, 访问并固定屏幕上的任务栏,以便在应用之间快速切换。这意味着 让应用具备自适应能力比以往任何时候都更加重要。
Google I/O 大会上有一些关于构建自适应 Android 的会议 应用和使用 Material 3 构建界面 自适应库 我们的文档中提供了更多帮助信息,帮助您针对大型语言 。
پشتیبانی از صفحه نمایش پوششی
您的应用可以声明一项属性,Android 15 会使用该属性将您的 Application
或 Activity
呈现在支持的可翻转设备的小封面屏幕上。这些屏幕太小,无法被视为 Android 应用的兼容目标,但您的应用可以选择支持这些屏幕,从而让您的应用可在更多位置使用。
قابلیت اتصال
Android 15 پلتفرم را به روز می کند تا برنامه شما به آخرین پیشرفت ها در زمینه ارتباطات و فناوری های بی سیم دسترسی داشته باشد.
پشتیبانی ماهواره ای
Android 15 继续扩展对卫星连接的平台支持,并添加了一些界面元素,以确保在卫星连接环境中提供一致的用户体验。
应用可以使用 ServiceState.isUsingNonTerrestrialNetwork()
检测设备何时连接到卫星,从而更好地了解为什么全网络服务不可用。此外,Android 15 支持短信和彩信应用以及预加载的 RCS 应用,以便使用卫星连接收发信息。
تجربه های روان تر NFC
Android 15 در تلاش است تا تجربه پرداخت یکپارچهتر و قابلاطمینانتر را ایجاد کند و در عین حال به پشتیبانی از اکوسیستم قدرتمند برنامه NFC اندروید ادامه دهد. در دستگاههای پشتیبانیشده، برنامهها میتوانند از NfcAdapter
درخواست کنند تا وارد حالت مشاهده شود، جایی که دستگاه گوش میدهد اما به خوانندههای NFC پاسخ نمیدهد و اشیاء PollingFrame
سرویس NFC برنامه را برای پردازش ارسال میکند. اشیاء PollingFrame
را می توان برای احراز هویت قبل از اولین ارتباط با خواننده NFC استفاده کرد که در بسیاری از موارد امکان تراکنش با یک ضربه را فراهم می کند.
علاوه بر این، برنامهها میتوانند فیلتری را روی دستگاههای پشتیبانیشده ثبت کنند تا بتوانند از فعالیت حلقه نظرسنجی مطلع شوند، که امکان عملکرد روان با چندین برنامه کاربردی NFC آگاه را فراهم میکند.
نقش کیف پول
اندروید 15 نقش کیف پول را معرفی میکند که اجازه میدهد با برنامه کیف پول ترجیحی کاربر یکپارچهتر شود. این نقش جایگزین تنظیم پیشفرض پرداخت بدون تماس NFC میشود. کاربران می توانند با رفتن به تنظیمات > برنامه ها > برنامه های پیش فرض، دارنده نقش Wallet را مدیریت کنند.
نقش Wallet هنگام مسیریابی شیرهای NFC برای ایدزهای ثبت شده در دسته پرداخت استفاده می شود. ضربه ها همیشه به دارنده نقش Wallet می روند مگر اینکه برنامه دیگری که برای همان AID ثبت شده باشد در پیش زمینه اجرا شود.
این نقش همچنین برای تعیین محل قرار گرفتن کاشی دسترسی سریع کیف پول هنگام فعال شدن استفاده می شود. وقتی نقش روی «هیچکدام» تنظیم شود، کاشی دسترسی سریع در دسترس نیست و ضربههای NFC دسته پرداخت فقط به برنامه پیشزمینه تحویل داده میشود.
امنیت
Android 15 به شما کمک می کند امنیت برنامه خود را افزایش دهید، از داده های برنامه خود محافظت کنید، و به کاربران شفافیت و کنترل بیشتری بر روی داده های خود می دهد. برای اطلاعات بیشتر در مورد کارهایی که برای بهبود ایمنی کاربر و محافظت از برنامه شما در برابر تهدیدات جدید انجام می دهیم، گفتگوی حفاظت از امنیت کاربر در Android را از Google I/O ببینید.
مدیریت اعتبار را با تکمیل خودکار ادغام کنید
Starting with Android 15, developers can link specific views like username or password fields with Credential Manager requests, making it easier to provide a tailored user experience during the sign-in process. When the user focuses on one of these views, a corresponding request is sent to Credential Manager. The resulting credentials are aggregated across providers and displayed in autofill fallback UIs, such as inline suggestions or drop-down suggestions. The Jetpack androidx.credentials library is the preferred endpoint for developers to use and will soon be available to further enhance this feature in Android 15 and higher.
ثبتنام و ورود با یک ضربه را با اعلانهای بیومتریک ادغام کنید
Credential Manager integrates biometric prompts into the credential creation and sign-in processes, eliminating the need for providers to manage biometric prompts. As a result, credential providers only need to focus on the results of the create and get flows, augmented with the biometric flow result. This simplified process creates a more efficient and streamlined credential creation and retrieval process.
مدیریت کلید برای رمزگذاری سرتاسر
我们在 Android 15 中引入了 E2eeContactKeysManager
,它提供用于存储加密公钥的操作系统级 API,有助于 Android 应用中的端到端加密 (E2EE)。
E2eeContactKeysManager
旨在与平台通讯录应用集成,使用户能够集中管理和验证其联系人的公钥。
مجوزهای URI محتوا را بررسی می کند
اندروید 15 مجموعهای از APIها را معرفی میکند که بررسیهای مجوز را روی URI محتوا انجام میدهند:
-
Context.checkContentUriPermissionFull
: این یک بررسی کامل مجوز در URIهای محتوا را انجام می دهد. - ویژگی مانیفست
Activity
requireContentUriPermissionFromCaller
: این مجوزهای مشخص شده را در URIهای محتوای ارائه شده در هنگام راه اندازی فعالیت اعمال می کند. - کلاس
ComponentCaller
برای تماس گیرندگانActivity
: این نشان دهنده برنامه ای است که فعالیت را راه اندازی کرده است.
دسترسی
اندروید 15 ویژگی هایی را اضافه می کند که دسترسی کاربران را بهبود می بخشد.
خط بریل بهتر
在 Android 15 中,TalkBack 可以支持通过 USB 和安全蓝牙使用 HID 标准的盲文显示屏。
此标准与鼠标和键盘使用的标准非常相似,有助于 Android 随着时间的推移而支持更广泛的盲文显示屏。
بین المللی شدن
اندروید 15 ویژگیها و قابلیتهایی را اضافه میکند که تجربه کاربر را در هنگام استفاده از دستگاه به زبانهای مختلف تکمیل میکند.
فونت متغیر CJK
با شروع Android 15، فایل فونت برای زبان های چینی، ژاپنی و کره ای (CJK)، NotoSansCJK، اکنون یک فونت متغیر است. فونت های متغیر فرصت هایی را برای تایپوگرافی خلاقانه در زبان های CJK باز می کنند. طراحان میتوانند طیف وسیعتری از سبکها را بررسی کنند و طرحبندیهای بصری چشمگیری ایجاد کنند که قبلاً دستیابی به آنها دشوار یا غیرممکن بود.
توجیه بین شخصیتی
با شروع Android 15، متن را می توان با استفاده از فاصله حروف با استفاده از JUSTIFICATION_MODE_INTER_CHARACTER
توجیه کرد. توجیه بین کلمه ای برای اولین بار در اندروید 8.0 (سطح API 26) معرفی شد و توجیه بین نویسه ها قابلیت های مشابهی را برای زبان هایی که از کاراکتر فضای خالی برای تقسیم بندی استفاده می کنند، مانند چینی، ژاپنی و غیره ارائه می دهد.
پیکربندی خودکار شکست خط
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_NONE
، همانطور که در تصویر زیر نشان داده شده است:
فونت ژاپنی Hentaigana اضافی
در اندروید 15، یک فایل فونت برای هیراگانای ژاپنی قدیمی (معروف به Hentaigana) به طور پیش فرض همراه است. اشکال منحصربهفرد شخصیتهای هنتایگانا میتواند استعدادی متمایز به آثار هنری یا طراحی اضافه کند و در عین حال به حفظ انتقال دقیق و درک اسناد باستانی ژاپنی کمک کند.
VideoLAN 锥形版权所有 (c) 1996-2010 VideoLAN。任何人都可以使用或修改此徽标或修改版本来指代 VideoLAN 项目或 VideoLAN 团队开发的任何产品,但不表示该项目的认可。
Vulkan 和 Vulkan 徽标是 Khronos Group Inc.的注册商标。
OpenGL 是注册商标,OpenGL ES 徽标是 Khronos 许可使用的 Hewlett Packard Enterprise 商标。
،اندروید 15 ویژگی ها و API های عالی را برای توسعه دهندگان معرفی می کند. بخشهای زیر این ویژگیها را خلاصه میکنند تا به شما در شروع کار با APIهای مرتبط کمک کنند.
برای فهرست دقیق APIهای اضافه شده، اصلاح شده و حذف شده، گزارش تفاوت API را بخوانید. برای جزئیات بیشتر در مورد APIهای اضافه شده به مرجع Android API مراجعه کنید — برای Android 15، به دنبال APIهایی باشید که در سطح API 35 اضافه شده اند. برای اطلاع از مناطقی که تغییرات پلت فرم ممکن است بر برنامه های شما تأثیر بگذارد، حتماً تغییرات رفتار Android 15 را برای برنامه هایی که اندروید 15 و برای همه برنامه ها را هدف قرار دهید.
دوربین و رسانه
اندروید 15 شامل ویژگیهای مختلفی است که تجربه دوربین و رسانه را بهبود میبخشد و به شما امکان میدهد به ابزارها و سختافزارهایی برای حمایت از سازندگان برای زنده کردن دیدگاهشان در اندروید دسترسی داشته باشید.
برای اطلاعات بیشتر در مورد جدیدترین ویژگیها و راهحلهای برنامهنویس برای رسانه و دوربین Android، به بحث ساخت رسانهها و تجربههای دوربین مدرن Android از Google I/O مراجعه کنید.
تقویت نور کم
اندروید 15 کم نور ، حالت نوردهی خودکار را معرفی می کند که هم برای دوربین 2 و هم برای پسوند دوربین حالت شب در دسترس است. Low Light Boost نوردهی جریان پیش نمایش را در شرایط کم نور تنظیم می کند. این با نحوه ایجاد تصاویر ثابت توسط پسوند دوربین حالت شب متفاوت است، زیرا حالت شب مجموعه ای از عکس ها را برای ایجاد یک تصویر واحد و پیشرفته ترکیب می کند. در حالی که حالت شب برای ایجاد یک تصویر ثابت بسیار خوب عمل می کند، نمی تواند یک جریان مداوم از فریم ها ایجاد کند، اما Low Light Boost می تواند. بنابراین، Low Light Boost قابلیت های دوربین را فعال می کند، مانند:
- ارائه یک پیشنمایش تصویر پیشرفته، بنابراین کاربران بهتر میتوانند عکسهای خود را در نور کم قاب کنند
- اسکن کدهای QR در نور کم
اگر Low Light Boost را فعال کنید، هنگامی که سطح نور کم باشد به طور خودکار روشن می شود و زمانی که نور بیشتر باشد خاموش می شود.
برنامهها میتوانند جریان پیشنمایش را در شرایط کمنور ضبط کنند تا یک ویدیوی روشن را ذخیره کنند.
برای اطلاعات بیشتر، Low Light Boost را ببینید.
کنترل های دوربین درون برنامه ای
اندروید 15 یک افزونه برای کنترل بیشتر بر سخت افزار دوربین و الگوریتم های آن در دستگاه های پشتیبانی شده اضافه می کند:
- تنظیمات پیشرفته قدرت فلاش که امکان کنترل دقیق شدت فلاش را در هر دو حالت
SINGLE
وTORCH
در هنگام ثبت تصاویر فراهم می کند.
کنترل فضای سر HDR
Android 15 会选择适合底层设备功能和面板的位深的 HDR 余量。对于包含大量 SDR 内容的页面(例如显示单个 HDR 缩略图的即时通讯应用),此行为最终可能会对 SDR 内容的感知亮度产生不利影响。Android 15 允许您使用 setDesiredHdrHeadroom
控制 HDR 余量,以在 SDR 和 HDR 内容之间取得平衡。
کنترل بلندی صدا
اندروید 15 از استاندارد بلندی صدای CTA-2075 پشتیبانی می کند تا به شما کمک کند از تناقضات بلندی صدا جلوگیری کنید و اطمینان حاصل کنید که کاربران مجبور نیستند به طور مداوم صدا را هنگام جابجایی بین محتوا تنظیم کنند. این سیستم از ویژگی های شناخته شده دستگاه های خروجی (هدفون و بلندگو) به همراه ابرداده بلندی صدای موجود در محتوای صوتی AAC استفاده می کند تا به طور هوشمندانه میزان بلندی صدا و تراکم دامنه پویا را تنظیم کند.
برای فعال کردن این ویژگی، باید مطمئن شوید که ابرداده بلندی صدا در محتوای AAC شما موجود است و ویژگی پلتفرم را در برنامه خود فعال کنید. برای این کار ، شما با فراخوانی روش ایجاد کارخانه با شناسه جلسه صوتی از AudioTrack
مرتبط ، یک شیء LoudnessCodecController
را فوری می کنید. این به طور خودکار شروع به اعمال به روز رسانی های صوتی می کند. می توانید یک OnLoudnessCodecUpdateListener
را برای اصلاح یا فیلتر کردن پارامترهای بلندی صدا قبل از اعمال آنها در 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 همچنین برای استفاده از API های LoudnessCodecController
برای یکپارچه سازی یکپارچه برنامه به روز می شود.
دستگاه های مجازی MIDI 2.0
Android 13 添加了对使用 USB 连接到 MIDI 2.0 设备的支持,USB 使用通用 MIDI 数据包 (UMP) 进行通信。Android 15 扩展了对虚拟 MIDI 应用的 UMP 支持,使合成器应用能够像对待 USB MIDI 2.0 设备一样将合成器应用作为虚拟 MIDI 2.0 设备进行控制。
رمزگشایی نرم افزار AV1 کارآمدتر
dav1d ، رمزگشای محبوب نرم افزار AV1 از VideoLAN برای دستگاه های اندرویدی که از رمزگشایی AV1 در سخت افزار پشتیبانی نمی کنند، در دسترس است. عملکرد dav1d تا 3 برابر بیشتر از رمزگشای نرمافزار AV1 قدیمی است و امکان پخش HD AV1 را برای کاربران بیشتری از جمله برخی دستگاههای سطح پایین و متوسط فراهم میکند.
برنامه شما باید با فراخوانی آن با نام "c2.android.av1-dav1d.decoder"
استفاده از dav1d را انتخاب کند. dav1d در به روز رسانی بعدی به عنوان رمزگشای پیش فرض نرم افزار AV1 تبدیل خواهد شد. این پشتیبانی استاندارد شده و برای دستگاههای Android 11 که بهروزرسانیهای سیستم Google Play را دریافت میکنند، پشتیبانی میشود.
بهره وری توسعه دهندگان و ابزار
در حالی که بیشتر کار ما برای بهبود بهرهوری شما حول ابزارهایی مانند Android Studio ، Jetpack Compose ، و کتابخانههای Android Jetpack متمرکز است، ما همیشه به دنبال راههایی در این پلتفرم هستیم تا به شما کمک کند راحتتر به دیدگاه خود پی ببرید.
به روز رسانی OpenJDK 17
اندروید 15 به کار تازه سازی کتابخانه های اصلی اندروید برای هماهنگی با ویژگی های آخرین نسخه OpenJDK LTS ادامه می دهد.
ویژگیها و بهبودهای کلیدی زیر شامل میشوند:
- بهبود کیفیت زندگی در اطراف بافرهای NIO
- جریان ها
- روشهای اضافی
math
وstrictmath
-
util
بسته شاملcollection
متوالی،map
وset
- پشتیبانی
ByteBuffer
درDeflater
- به روز رسانی های امنیتی مانند
X500PrivateCredential
و به روز رسانی های کلید امنیتی
این APIها در بیش از یک میلیارد دستگاه دارای Android 12 (سطح API 31) و بالاتر از طریق بهروزرسانیهای سیستم Google Play بهروزرسانی میشوند، بنابراین میتوانید آخرین ویژگیهای برنامهنویسی را هدف قرار دهید.
پیشرفت های PDF
اندروید 15 شامل بهبودهای قابل توجهی در APIهای PdfRenderer
است. برنامهها میتوانند ویژگیهای پیشرفتهای مانند ارائه فایلهای محافظتشده با رمز عبور ، حاشیهنویسی، ویرایش فرم ، جستجو و انتخاب با کپی را در خود جای دهند. بهینه سازی خطی PDF برای سرعت بخشیدن به مشاهده PDF محلی و کاهش استفاده از منابع پشتیبانی می شود. کتابخانه PDF Jetpack از این APIها برای ساده کردن افزودن قابلیت مشاهده PDF به برنامه شما استفاده می کند.
PdfRenderer
به ماژولی منتقل شده است که میتواند با استفاده از بهروزرسانیهای سیستم Google Play مستقل از نسخه پلتفرم بهروزرسانی شود، و ما با ایجاد یک نسخه سازگار پیش از Android 15 از این تغییرات به Android 11 (سطح API 30) پشتیبانی میکنیم. سطح API، به نام PdfRendererPreV
.
اصلاحات تغییر خودکار زبان
Android 14 增加了设备端音频中的多语言识别功能,可在语言之间自动切换,但这可能会导致单词丢失,尤其是在语言切换时,两种话语之间的停顿较少时。Android 15 添加了额外的控件,可帮助应用根据其用例调整此切换。EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS
会将自动切换限制为仅在音频会话开始时进行,而 EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES
则会在指定次数的切换后停用语言切换。如果您希望自动检测到会话期间只讲一种语言,这些选项特别有用。
API فونت متغیر 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های قدیمی و جدید آورده شده است:
در این مثال، Typeface
ایجاد شده با API قدیمی توانایی ایجاد وزن فونت های دقیق برای نمونه های Font
350، 450، 550 و 650 را ندارد، بنابراین رندر به نزدیک ترین وزن باز می گردد. بنابراین در این حالت به جای 350 عدد 300 و به جای 450 عدد 400 و به همین ترتیب رندر می شود. در مقابل، Typeface
ایجاد شده با APIهای جدید به صورت پویا یک نمونه Font
برای وزن مشخص ایجاد می کند، بنابراین وزن های دقیق برای 350، 450، 550 و 650 نیز ارائه می شود.
کنترل های شکست خط دانه ای
با شروع در اندروید 15، یک TextView
و خط شکن زیرین میتوانند بخش داده شده از متن را در همان خط حفظ کنند تا خوانایی را بهبود بخشند. شما می توانید با استفاده از تگ <nobreak>
در منابع رشته یا createNoBreakSpan
از این سفارشی سازی خط شکن استفاده کنید. به طور مشابه، میتوانید با استفاده از تگ <nohyphen>
یا createNoHyphenationSpan
، کلمات را از خط فاصله حفظ کنید.
به عنوان مثال، منبع رشته زیر شامل یک خط شکسته نمیشود و با متن «Pixel 8 Pro» رندر میشود. شکستن در محل نامطلوب:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
در مقابل، این منبع رشته شامل تگ <nobreak>
است که عبارت "Pixel 8 Pro" را میپیچد. و از شکستگی خطوط جلوگیری می کند:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
تفاوت در نحوه رندر شدن این رشته ها در تصاویر زیر نشان داده شده است:
بایگانی برنامه
Android و Google Play سال گذشته پشتیبانی از بایگانی برنامه را اعلام کردند و به کاربران این امکان را داد تا با حذف بخشی از برنامههای کم استفاده از دستگاه که با استفاده از Android App Bundle در Google Play منتشر شدهاند، فضا را آزاد کنند. اندروید 15 شامل پشتیبانی سطح سیستم عامل برای بایگانی و حذف بایگانی برنامه است که اجرای آن را برای همه فروشگاه های برنامه آسان تر می کند.
برنامههای دارای مجوز REQUEST_DELETE_PACKAGES
میتوانند با روش PackageInstaller
requestArchive
تماس بگیرند تا بایگانی یک بسته برنامه نصبشده را درخواست کنند، که APK و هر فایل حافظه پنهان را حذف میکند، اما دادههای کاربر را حفظ میکند. برنامه های آرشیو شده به عنوان برنامه های قابل نمایش از طریق API های LauncherApps
برگردانده می شوند. کاربران برای برجسته کردن آرشیو بودن آن برنامه ها، یک رابط کاربری را مشاهده خواهند کرد. اگر کاربر روی یک برنامه بایگانی شده ضربه بزند، نصب کننده مسئول درخواستی برای حذف بایگانی آن دریافت می کند و فرآیند بازیابی می تواند توسط پخش ACTION_PACKAGE_ADDED
نظارت شود.
گرافیک
اندروید 15 جدیدترین پیشرفتهای گرافیکی، از جمله ANGLE و اضافهشدهها به سیستم گرافیکی Canvas را به ارمغان میآورد.
مدرن کردن دسترسی به پردازنده گرافیکی اندروید
从早期开始,核心操作系统在单个 CPU 上运行,GPU 通过基于固定函数流水线的 API 进行访问,Android 硬件已经发生了很大变化。从 Android 7.0(API 级别 24)开始,NDK 中就已提供 Vulkan® 图形 API。它采用较低级别的抽象,可以更好地反映现代 GPU 硬件,能够更好地进行扩展以支持多个 CPU 核心,并可减少 CPU 驱动程序开销,从而提升应用性能。所有现代游戏引擎都支持 Vulkan。
Vulkan 是 Android 的 GPU 首选接口。因此,Android 15 包含 ANGLE 作为可选层,用于在 Vulkan 上运行 OpenGL® ES。迁移到 ANGLE 会将 Android OpenGL 实现标准化,以提高兼容性,在某些情况下还可提升性能。您可以使用 ANGLE 测试 OpenGL ES 应用的稳定性和性能,方法是在 Android 15 上依次点击设置 -> 系统 -> 开发者选项 -> 实验性功能:启用 ANGLE,启用开发者选项。
Vulkan 上的 Android ANGLE 路线图
作为简化 GPU 堆栈的一部分,今后我们将在更多新设备上以 GL 系统驱动程序的形式提供 ANGLE,预计未来将只能通过 ANGLE 使用 OpenGL/ES。不过,我们计划在所有设备上继续支持 OpenGL ES。
建议的后续措施
使用开发者选项选择适用于 OpenGL ES 的 ANGLE 驱动程序并测试您的应用。对于新项目,我们强烈建议您使用适用于 C/C++ 的 Vulkan。
بهبودهایی برای بوم
اندروید 15 به مدرن سازی سیستم گرافیکی Canvas اندروید با قابلیت های اضافی ادامه می دهد:
-
Matrix44
یک ماتریس 4x4 برای تبدیل مختصات ارائه می دهد که باید برای دستکاری بوم به صورت سه بعدی استفاده شود. -
clipShader
کلیپ فعلی را با سایهزن مشخص شده قطع میکند، در حالی کهclipOutShader
کلیپ را روی تفاوت کلیپ فعلی و سایهزن تنظیم میکند و هر کدام سایهزن را به عنوان یک ماسک آلفا در نظر میگیرند. این از ترسیم اشکال پیچیده به طور موثر پشتیبانی می کند.
عملکرد و باتری
Android به تمرکز خود بر کمک به شما در بهبود عملکرد و کیفیت برنامههایتان ادامه میدهد. Android 15 API هایی را معرفی می کند که به کارآمدتر کردن وظایف در برنامه شما برای اجرا، بهینه سازی عملکرد برنامه و جمع آوری اطلاعات بینش در مورد برنامه های شما کمک می کند.
برای بهترین روشهای کارآمد باتری، اشکالزدایی شبکه و مصرف انرژی، و جزئیات نحوه بهبود کارایی باتری در کار پسزمینه در Android 15 و نسخههای اخیر Android، به بهبود کارایی باتری کار پسزمینه در بحث Android از Google I/ مراجعه کنید. O.
ApplicationStartInfo API
在以前的 Android 版本中,应用启动有点神秘。在应用中确定应用是从冷状态、温状态还是热状态开始的过程很难确定。此外,我们也很难知道您的应用在不同发布阶段所用的时间:创建进程分支、调用 onCreate
、绘制第一帧等。在实例化 Application
类时,您无法得知应用是从广播、content provider、作业、备份、启动完成、闹钟还是 Activity
启动的。
Android 15 上的 ApplicationStartInfo
API 可提供所有这些功能以及更多其他功能。您甚至可以选择将自己的时间戳添加到流程中,以便在一个位置收集时间数据。除了收集指标之外,您还可以使用 ApplicationStartInfo
直接优化应用启动;例如,当应用因广播而启动时,您可以避免在 Application
类中实例化界面相关库的高成本。
اطلاعات دقیق اندازه برنامه
自 Android 8.0(API 级别 26)起,Android 就一直包含 StorageStats.getAppBytes
API,该 API 将应用的安装大小汇总为一个字节,这些字节是 APK 大小、从 APK 中提取的文件的大小以及设备上生成的文件(例如预先 (AOT) 编译代码)的总和。就应用的存储空间使用情况而言,此数字并不富有见解。
Android 15 增加了 StorageStats.getAppBytesByDataType([type])
API,可让您深入了解应用如何使用所有空间,包括 APK 文件拆分、AOT 和加速相关代码、dex 元数据、库和引导式配置文件。
پروفایل مدیریت شده توسط برنامه
Android 15 شامل کلاس ProfilingManager
است که به شما امکان می دهد اطلاعات پروفایل را از داخل برنامه خود جمع آوری کنید. ما قصد داریم این را با یک API Android Jetpack بپوشانیم که ساخت درخواستهای پروفایل را سادهتر میکند، اما API اصلی امکان جمعآوری heap dumps، heap profiles، stack sampling و موارد دیگر را فراهم میکند. این یک تگ ارائه شده برای شناسایی فایل خروجی که به دایرکتوری فایل های برنامه شما تحویل داده می شود، به برنامه شما پاسخ تماس می دهد. API برای به حداقل رساندن تأثیر عملکرد، نرخ را محدود می کند.
بهبود پایگاه داده SQLite
اندروید 15 APIهای SQLite را معرفی میکند که ویژگیهای پیشرفتهای را از موتور اصلی SQLite نشان میدهد که مشکلات عملکرد خاصی را که میتواند در برنامهها آشکار شود را هدف قرار میدهد.
توسعه دهندگان باید از بهترین شیوه ها برای عملکرد SQLite استفاده کنند تا بیشترین بهره را از پایگاه داده SQLite خود ببرند، به ویژه هنگام کار با پایگاه داده های بزرگ یا هنگام اجرای پرس و جوهای حساس به تأخیر.
- تراکنشهای معوق فقط خواندنی : هنگام صدور تراکنشهایی که فقط خواندنی هستند (شرایط نوشتن را شامل نمیشود)، از
beginTransactionReadOnly()
وbeginTransactionWithListenerReadOnly(SQLiteTransactionListener)
برای صدور تراکنشهایDEFERRED
فقط خواندنی استفاده کنید. چنین تراکنش هایی می توانند همزمان با یکدیگر اجرا شوند و اگر پایگاه داده در حالت WAL باشد، می توانند همزمان با تراکنش هایIMMEDIATE
یاEXCLUSIVE
اجرا شوند. - تعداد ردیف ها و شناسه ها : API ها برای بازیابی تعداد ردیف های تغییر یافته یا آخرین شناسه ردیف درج شده بدون ارسال درخواست اضافی اضافه شدند.
getLastChangedRowCount()
تعداد ردیفهایی را که توسط آخرین دستور SQL در تراکنش جاری درج، بهروزرسانی یا حذف شدهاند را برمیگرداند، در حالی کهgetTotalChangedRowCount()
تعداد اتصال فعلی را برمیگرداند.getLastInsertRowId()
rowid
آخرین ردیفی که باید در اتصال فعلی درج شود را برمی گرداند. - بیانیههای خام : یک بیانیه خام SQlite صادر کنید، با دور زدن بستهبندیهای راحت و هر سربار پردازش اضافی که ممکن است متحمل شوند.
بهروزرسانیهای چارچوب عملکرد پویا اندروید
Android 15 به سرمایه گذاری ما در Android Dynamic Performance Framework (ADPF) ادامه می دهد، مجموعه ای از API ها که به بازی ها و برنامه های فشرده عملکرد اجازه می دهد تا به طور مستقیم با سیستم های قدرت و حرارت دستگاه های Android ارتباط برقرار کنند. در دستگاههای پشتیبانیشده، Android 15 قابلیتهای ADPF را اضافه میکند:
- یک حالت بهره وری انرژی برای جلسات راهنمایی که نشان می دهد رشته های مرتبط آنها باید صرفه جویی در مصرف انرژی را به عملکرد ترجیح دهند، که برای بارهای کاری پس زمینه طولانی مدت عالی است.
- مدت زمان کار GPU و CPU را می توان هر دو در جلسات راهنمایی گزارش کرد و به سیستم اجازه می دهد فرکانس های CPU و GPU را با هم تنظیم کند تا به بهترین شکل نیازهای بار کاری را برآورده کند.
- آستانههای دمایی برای تفسیر وضعیت احتمالی درگیری حرارتی بر اساس پیشبینی فضای سر.
برای کسب اطلاعات بیشتر در مورد نحوه استفاده از ADPF در برنامه ها و بازی های خود، به مستندات مراجعه کنید .
حریم خصوصی
اندروید 15 دارای ویژگی های مختلفی است که به توسعه دهندگان اپلیکیشن کمک می کند تا از حریم خصوصی کاربران محافظت کنند.
تشخیص ضبط صفحه
اندروید 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>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:domain="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>
فضای خصوصی
فضای خصوصی به کاربران این امکان را می دهد که فضای جداگانه ای در دستگاه خود ایجاد کنند که در آن می توانند برنامه های حساس را از چشمان کنجکاو دور نگه دارند، زیر یک لایه دیگر از احراز هویت. فضای خصوصی از یک پروفایل کاربری مجزا استفاده می کند. کاربر می تواند انتخاب کند که از قفل دستگاه یا فاکتور قفل جداگانه برای فضای خصوصی استفاده کند.
برنامههای موجود در فضای خصوصی در یک محفظه جداگانه در راهانداز نمایش داده میشوند و وقتی فضای خصوصی قفل است از نمای اخیر، اعلانها، تنظیمات و از سایر برنامهها پنهان میشوند. محتوای تولید شده و دانلود شده توسط کاربر (مانند رسانه یا فایل ها) و حساب ها بین فضای خصوصی و فضای اصلی جدا می شوند. از اشتراکگذاری سیستم و انتخابگر عکس میتوان برای دسترسی برنامهها به محتوا در فضاهای مختلف زمانی که فضای خصوصی باز است استفاده کرد.
کاربران نمی توانند برنامه های موجود و داده های آنها را به فضای خصوصی منتقل کنند. در عوض، کاربران یک گزینه نصب را در فضای خصوصی برای نصب یک برنامه با استفاده از فروشگاه برنامه ای که ترجیح می دهند انتخاب می کنند. برنامههای موجود در فضای خصوصی بهعنوان نسخههای جداگانه از هر برنامهای در فضای اصلی (کپیهای جدید همان برنامه) نصب میشوند.
وقتی کاربر فضای خصوصی را قفل می کند، نمایه متوقف می شود. وقتی نمایه متوقف شده است، برنامههای موجود در فضای خصوصی دیگر فعال نیستند و نمیتوانند فعالیتهای پیشزمینه یا پسزمینه، از جمله نمایش اعلانها را انجام دهند.
توصیه می کنیم برنامه خود را با فضای خصوصی آزمایش کنید تا مطمئن شوید برنامه شما همانطور که انتظار می رود کار می کند، به خصوص اگر برنامه شما در یکی از دسته های زیر قرار می گیرد:
- برنامههایی با منطق برای نمایههای کاری که فرض میکنند هر نسخه نصبشده برنامهشان که در نمایه اصلی نیست، در نمایه کاری است.
- اپلیکیشن های پزشکی
- برنامه های راه اندازی
- اپلیکیشن های اپ استور
آخرین انتخاب کاربر را برای دسترسی به عکسهای انتخابی جستجو کنید
برنامهها اکنون میتوانند تنها عکسها و ویدیوهایی را که اخیراً انتخاب شدهاند، در صورت اعطای دسترسی جزئی به مجوزهای رسانه، برجسته کنند. این ویژگی میتواند تجربه کاربری را برای برنامههایی که اغلب درخواست دسترسی به عکسها و ویدیوها را دارند، بهبود بخشد. برای استفاده از این ویژگی در برنامه خود، هنگام درخواست 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 شامل جدیدترین برنامههای افزودنی Android Ad Services است که جدیدترین نسخه جعبه ایمنی حریم خصوصی در Android را در خود جای داده است. این افزوده بخشی از کار ما برای توسعه فناوریهایی است که حریم خصوصی کاربر را بهبود میبخشد و تجربههای تبلیغاتی شخصی و مؤثر را برای برنامههای تلفن همراه امکانپذیر میسازد. صفحه جعبه ایمنی حریم خصوصی ما اطلاعات بیشتری درباره Privacy Sandbox در برنامههای پیشنمایش برنامهنویس Android و بتا دارد تا به شما در شروع کار کمک کند.
Health Connect
Android 15 جدیدترین برنامههای افزودنی پیرامون Health Connect توسط Android را یکپارچه میکند، یک پلتفرم امن و متمرکز برای مدیریت و اشتراکگذاری دادههای سلامت و تناسب اندام جمعآوریشده توسط برنامه. این بهروزرسانی از انواع دادههای اضافی در تناسب اندام ، تغذیه ، دمای پوست، برنامههای تمرینی و موارد دیگر پشتیبانی میکند.
ردیابی دمای پوست به کاربران این امکان را می دهد که داده های دمایی دقیق تری را از یک دستگاه پوشیدنی یا دستگاه ردیابی دیگر ذخیره و به اشتراک بگذارند.
برنامه های تمرینی برنامه های تمرینی ساختاری برای کمک به کاربر برای دستیابی به اهداف تناسب اندام خود هستند. پشتیبانی برنامه های آموزشی شامل انواع اهداف تکمیل و عملکرد است:
- اهداف تکمیل در مورد کالری سوزانده شده ، مسافت ، مدت زمان ، تکرار ، و مراحل .
- اهداف عملکردی حول هرچه بیشتر تکرارها (AMRAP) ، آهنگ ، ضربان قلب ، قدرت ، میزان تلاش درک شده و سرعت .
درباره آخرین بهروزرسانیهای Health Connect در Android در تجربههای سازگار با Android Health از Google I/O در ساختمان، بیشتر بیاموزید.
اشتراک گذاری جزئی صفحه نمایش
اندروید 15 از اشتراکگذاری جزئی صفحه پشتیبانی میکند تا کاربران بتوانند تنها یک پنجره برنامه را بهجای کل صفحه دستگاه به اشتراک بگذارند یا ضبط کنند. این ویژگی که برای اولین بار در Android 14 QPR2 فعال شد، شامل تماسهای MediaProjection
است که به برنامه شما اجازه میدهد تا تجربه اشتراکگذاری جزئی صفحه را سفارشی کند. توجه داشته باشید که برای برنامههایی که Android 14 (سطح API 34) یا بالاتر را هدف قرار میدهند، رضایت کاربر برای هر جلسه ضبط MediaProjection
لازم است.
تجربه کاربری و رابط کاربری سیستم
اندروید 15 به توسعه دهندگان و کاربران برنامه کنترل و انعطاف بیشتری را برای پیکربندی دستگاه خود مطابق با نیازهایشان می دهد.
برای کسب اطلاعات بیشتر در مورد نحوه استفاده از آخرین پیشرفتها در Android 15 برای بهبود تجربه کاربری برنامه، به بحث بهبود تجربه کاربری برنامه Android خود از Google I/O مراجعه کنید.
پیشنمایشهای غنیتر ویجت با Generated Previews API
قبل از اندروید 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)
)
جریان مورد انتظار عبارت است از:
- در هر زمان، ارائهدهنده ویجت با
setWidgetPreview
تماس میگیرد. پیشنمایشهای ارائهشده درAppWidgetService
با سایر اطلاعات ارائهدهنده وجود دارند. -
setWidgetPreview
از طریقAppWidgetHost.onProvidersChanged
، میزبان ها را از پیش نمایش به روز شده مطلع می کند. در پاسخ، میزبان ویجت تمام اطلاعات ارائه دهنده خود را دوباره بارگیری می کند. - هنگام نمایش یک پیشنمایش ویجت، میزبان
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
允许应用自定义注意力机制
管理(勿扰)规则,并确定何时启用或停用
。Android 15 极大地增强了这些规则,旨在提高
用户体验。其中包含以下增强功能:
- 向
AutomaticZenRule
添加类型,让系统能够应用特殊类型 对某些规则的处理 - 向
AutomaticZenRule
添加图标,使模式更加丰富 易于识别。 - 将
triggerDescription
字符串添加到AutomaticZenRule
,用于描述 规则应当对用户生效的条件。 - 已添加
ZenDeviceEffects
更改为AutomaticZenRule
,从而允许规则触发灰度等操作 显示、夜间模式或调暗壁纸。
VibrationEffect را برای کانال های اعلان تنظیم کنید
Android 15 支持为传入的通知设置丰富的振动,方法是
频道使用的是NotificationChannel.setVibrationEffect
,因此
您的用户可以区分不同类型的通知
不需要看他们的设备
صفحه نمایش های بزرگ و عوامل شکل
Android 15 به برنامههای شما پشتیبانی میکند تا از فاکتورهای فرم اندروید، از جمله صفحهنمایشهای بزرگ، قابلیتهای تاشو، و تاشو نهایت استفاده را ببرند.
چندوظیفه ای با صفحه نمایش بزرگ بهبود یافته است
Android 15 为用户提供了在大屏设备上更好地进行多任务处理的方式。对于 例如,用户可以保存自己喜爱的分屏应用组合, 访问并固定屏幕上的任务栏,以便在应用之间快速切换。这意味着 让应用具备自适应能力比以往任何时候都更加重要。
Google I/O 大会上有一些关于构建自适应 Android 的会议 应用和使用 Material 3 构建界面 自适应库 我们的文档中提供了更多帮助信息,帮助您针对大型语言 。
پشتیبانی از صفحه نمایش پوششی
您的应用可以声明一项属性,Android 15 会使用该属性将您的 Application
或 Activity
呈现在支持的可翻转设备的小封面屏幕上。这些屏幕太小,无法被视为 Android 应用的兼容目标,但您的应用可以选择支持这些屏幕,从而让您的应用可在更多位置使用。
قابلیت اتصال
Android 15 پلتفرم را به روز می کند تا برنامه شما به آخرین پیشرفت ها در زمینه ارتباطات و فناوری های بی سیم دسترسی داشته باشد.
پشتیبانی ماهواره ای
Android 15 继续扩展对卫星连接的平台支持,并添加了一些界面元素,以确保在卫星连接环境中提供一致的用户体验。
应用可以使用 ServiceState.isUsingNonTerrestrialNetwork()
检测设备何时连接到卫星,从而更好地了解为什么全网络服务不可用。此外,Android 15 支持短信和彩信应用以及预加载的 RCS 应用,以便使用卫星连接收发信息。
تجربه های روان تر NFC
Android 15 در تلاش است تا تجربه پرداخت یکپارچهتر و قابلاطمینانتر را ایجاد کند و در عین حال به پشتیبانی از اکوسیستم قدرتمند برنامه NFC اندروید ادامه دهد. در دستگاههای پشتیبانیشده، برنامهها میتوانند از NfcAdapter
درخواست کنند تا وارد حالت مشاهده شود، جایی که دستگاه گوش میدهد اما به خوانندههای NFC پاسخ نمیدهد و اشیاء PollingFrame
سرویس NFC برنامه را برای پردازش ارسال میکند. اشیاء PollingFrame
را می توان برای احراز هویت قبل از اولین ارتباط با خواننده NFC استفاده کرد که در بسیاری از موارد امکان تراکنش با یک ضربه را فراهم می کند.
علاوه بر این، برنامهها میتوانند فیلتری را روی دستگاههای پشتیبانیشده ثبت کنند تا بتوانند از فعالیت حلقه نظرسنجی مطلع شوند، که امکان عملکرد روان با چندین برنامه کاربردی NFC آگاه را فراهم میکند.
نقش کیف پول
اندروید 15 نقش کیف پول را معرفی میکند که اجازه میدهد با برنامه کیف پول ترجیحی کاربر یکپارچهتر شود. این نقش جایگزین تنظیم پیشفرض پرداخت بدون تماس NFC میشود. کاربران می توانند با رفتن به تنظیمات > برنامه ها > برنامه های پیش فرض، دارنده نقش Wallet را مدیریت کنند.
نقش Wallet هنگام مسیریابی شیرهای NFC برای ایدزهای ثبت شده در دسته پرداخت استفاده می شود. ضربه ها همیشه به دارنده نقش Wallet می روند مگر اینکه برنامه دیگری که برای همان AID ثبت شده باشد در پیش زمینه اجرا شود.
این نقش همچنین برای تعیین محل قرار گرفتن کاشی دسترسی سریع کیف پول هنگام فعال شدن استفاده می شود. وقتی نقش روی «هیچکدام» تنظیم شود، کاشی دسترسی سریع در دسترس نیست و ضربههای NFC دسته پرداخت فقط به برنامه پیشزمینه تحویل داده میشود.
امنیت
Android 15 به شما کمک می کند امنیت برنامه خود را افزایش دهید، از داده های برنامه خود محافظت کنید، و به کاربران شفافیت و کنترل بیشتری بر روی داده های خود می دهد. برای اطلاعات بیشتر در مورد کارهایی که برای بهبود ایمنی کاربر و محافظت از برنامه شما در برابر تهدیدات جدید انجام می دهیم، گفتگوی حفاظت از امنیت کاربر در Android را از Google I/O ببینید.
مدیریت اعتبار را با تکمیل خودکار ادغام کنید
Starting with Android 15, developers can link specific views like username or password fields with Credential Manager requests, making it easier to provide a tailored user experience during the sign-in process. When the user focuses on one of these views, a corresponding request is sent to Credential Manager. The resulting credentials are aggregated across providers and displayed in autofill fallback UIs, such as inline suggestions or drop-down suggestions. The Jetpack androidx.credentials library is the preferred endpoint for developers to use and will soon be available to further enhance this feature in Android 15 and higher.
ثبتنام و ورود با یک ضربه را با اعلانهای بیومتریک ادغام کنید
Credential Manager integrates biometric prompts into the credential creation and sign-in processes, eliminating the need for providers to manage biometric prompts. As a result, credential providers only need to focus on the results of the create and get flows, augmented with the biometric flow result. This simplified process creates a more efficient and streamlined credential creation and retrieval process.
مدیریت کلید برای رمزگذاری سرتاسر
我们在 Android 15 中引入了 E2eeContactKeysManager
,它提供用于存储加密公钥的操作系统级 API,有助于 Android 应用中的端到端加密 (E2EE)。
E2eeContactKeysManager
旨在与平台通讯录应用集成,使用户能够集中管理和验证其联系人的公钥。
مجوزهای URI محتوا را بررسی می کند
اندروید 15 مجموعهای از APIها را معرفی میکند که بررسیهای مجوز را روی URI محتوا انجام میدهند:
-
Context.checkContentUriPermissionFull
: این یک بررسی کامل مجوز در URIهای محتوا را انجام می دهد. - ویژگی مانیفست
Activity
requireContentUriPermissionFromCaller
: این مجوزهای مشخص شده را در URIهای محتوای ارائه شده در هنگام راه اندازی فعالیت اعمال می کند. - کلاس
ComponentCaller
برای تماس گیرندگانActivity
: این نشان دهنده برنامه ای است که فعالیت را راه اندازی کرده است.
دسترسی
اندروید 15 ویژگی هایی را اضافه می کند که دسترسی کاربران را بهبود می بخشد.
خط بریل بهتر
在 Android 15 中,TalkBack 可以支持通过 USB 和安全蓝牙使用 HID 标准的盲文显示屏。
此标准与鼠标和键盘使用的标准非常相似,有助于 Android 随着时间的推移而支持更广泛的盲文显示屏。
بین المللی شدن
اندروید 15 ویژگیها و قابلیتهایی را اضافه میکند که تجربه کاربر را در هنگام استفاده از دستگاه به زبانهای مختلف تکمیل میکند.
فونت متغیر CJK
با شروع Android 15، فایل فونت برای زبان های چینی، ژاپنی و کره ای (CJK)، NotoSansCJK، اکنون یک فونت متغیر است. فونت های متغیر فرصت هایی را برای تایپوگرافی خلاقانه در زبان های CJK باز می کنند. طراحان میتوانند طیف وسیعتری از سبکها را بررسی کنند و طرحبندیهای بصری چشمگیری ایجاد کنند که قبلاً دستیابی به آنها دشوار یا غیرممکن بود.
توجیه بین شخصیتی
با شروع Android 15، متن را می توان با استفاده از فاصله حروف با استفاده از JUSTIFICATION_MODE_INTER_CHARACTER
توجیه کرد. توجیه بین کلمه ای برای اولین بار در اندروید 8.0 (سطح API 26) معرفی شد و توجیه بین نویسه ها قابلیت های مشابهی را برای زبان هایی که از کاراکتر فضای خالی برای تقسیم بندی استفاده می کنند، مانند چینی، ژاپنی و غیره ارائه می دهد.
پیکربندی خودکار شکست خط
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_NONE
، همانطور که در تصویر زیر نشان داده شده است:
فونت ژاپنی Hentaigana اضافی
در اندروید 15، یک فایل فونت برای هیراگانای ژاپنی قدیمی (معروف به Hentaigana) به طور پیش فرض همراه است. اشکال منحصربهفرد شخصیتهای هنتایگانا میتواند استعدادی متمایز به آثار هنری یا طراحی اضافه کند و در عین حال به حفظ انتقال دقیق و درک اسناد باستانی ژاپنی کمک کند.
VideoLAN 锥形版权所有 (c) 1996-2010 VideoLAN。任何人都可以使用或修改此徽标或修改版本来指代 VideoLAN 项目或 VideoLAN 团队开发的任何产品,但不表示该项目的认可。
Vulkan 和 Vulkan 徽标是 Khronos Group Inc.的注册商标。
OpenGL 是注册商标,OpenGL ES 徽标是 Khronos 许可使用的 Hewlett Packard Enterprise 商标。
،اندروید 15 ویژگی ها و API های عالی را برای توسعه دهندگان معرفی می کند. بخشهای زیر این ویژگیها را خلاصه میکنند تا به شما در شروع کار با APIهای مرتبط کمک کنند.
برای فهرست دقیق APIهای اضافه شده، اصلاح شده و حذف شده، گزارش تفاوت API را بخوانید. برای جزئیات بیشتر در مورد APIهای اضافه شده به مرجع Android API مراجعه کنید — برای Android 15، به دنبال APIهایی باشید که در سطح API 35 اضافه شده اند. برای اطلاع از مناطقی که تغییرات پلت فرم ممکن است بر برنامه های شما تأثیر بگذارد، حتماً تغییرات رفتار Android 15 را برای برنامه هایی که اندروید 15 و برای همه برنامه ها را هدف قرار دهید.
دوربین و رسانه
اندروید 15 شامل ویژگیهای مختلفی است که تجربه دوربین و رسانه را بهبود میبخشد و به شما امکان میدهد به ابزارها و سختافزارهایی برای حمایت از سازندگان برای زنده کردن دیدگاهشان در اندروید دسترسی داشته باشید.
برای اطلاعات بیشتر در مورد جدیدترین ویژگیها و راهحلهای برنامهنویس برای رسانه و دوربین Android، به بحث ساخت رسانهها و تجربههای دوربین مدرن Android از Google I/O مراجعه کنید.
تقویت نور کم
اندروید 15 کم نور ، حالت نوردهی خودکار را معرفی می کند که هم برای دوربین 2 و هم برای پسوند دوربین حالت شب در دسترس است. Low Light Boost نوردهی جریان پیش نمایش را در شرایط کم نور تنظیم می کند. این با نحوه ایجاد تصاویر ثابت توسط پسوند دوربین حالت شب متفاوت است، زیرا حالت شب مجموعه ای از عکس ها را برای ایجاد یک تصویر واحد و پیشرفته ترکیب می کند. در حالی که حالت شب برای ایجاد یک تصویر ثابت بسیار خوب عمل می کند، نمی تواند یک جریان مداوم از فریم ها ایجاد کند، اما Low Light Boost می تواند. بنابراین، Low Light Boost قابلیت های دوربین را فعال می کند، مانند:
- ارائه یک پیشنمایش تصویر پیشرفته، بنابراین کاربران بهتر میتوانند عکسهای خود را در نور کم قاب کنند
- اسکن کدهای QR در نور کم
اگر Low Light Boost را فعال کنید، هنگامی که سطح نور کم باشد به طور خودکار روشن می شود و زمانی که نور بیشتر باشد خاموش می شود.
برنامهها میتوانند جریان پیشنمایش را در شرایط کمنور ضبط کنند تا یک ویدیوی روشن را ذخیره کنند.
برای اطلاعات بیشتر، Low Light Boost را ببینید.
کنترل های دوربین درون برنامه ای
اندروید 15 یک افزونه برای کنترل بیشتر بر سخت افزار دوربین و الگوریتم های آن در دستگاه های پشتیبانی شده اضافه می کند:
- تنظیمات پیشرفته قدرت فلاش که امکان کنترل دقیق شدت فلاش را در هر دو حالت
SINGLE
وTORCH
در هنگام ثبت تصاویر فراهم می کند.
کنترل فضای سر HDR
Android 15 会选择适合底层设备功能和面板的位深的 HDR 余量。对于包含大量 SDR 内容的页面(例如显示单个 HDR 缩略图的即时通讯应用),此行为最终可能会对 SDR 内容的感知亮度产生不利影响。Android 15 允许您使用 setDesiredHdrHeadroom
控制 HDR 余量,以在 SDR 和 HDR 内容之间取得平衡。
کنترل بلندی صدا
اندروید 15 از استاندارد بلندی صدای CTA-2075 پشتیبانی می کند تا به شما کمک کند از تناقضات بلندی صدا جلوگیری کنید و اطمینان حاصل کنید که کاربران مجبور نیستند به طور مداوم صدا را هنگام جابجایی بین محتوا تنظیم کنند. این سیستم از ویژگی های شناخته شده دستگاه های خروجی (هدفون و بلندگو) به همراه ابرداده بلندی صدای موجود در محتوای صوتی AAC استفاده می کند تا به طور هوشمندانه میزان بلندی صدا و تراکم دامنه پویا را تنظیم کند.
برای فعال کردن این ویژگی، باید مطمئن شوید که ابرداده بلندی صدا در محتوای AAC شما موجود است و ویژگی پلتفرم را در برنامه خود فعال کنید. برای این کار ، شما با فراخوانی روش ایجاد کارخانه با شناسه جلسه صوتی از AudioTrack
مرتبط ، یک شیء LoudnessCodecController
را فوری می کنید. این به طور خودکار شروع به اعمال به روز رسانی های صوتی می کند. می توانید یک OnLoudnessCodecUpdateListener
را برای اصلاح یا فیلتر کردن پارامترهای بلندی صدا قبل از اعمال آنها در 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 همچنین برای استفاده از API های LoudnessCodecController
برای یکپارچه سازی یکپارچه برنامه به روز می شود.
دستگاه های مجازی MIDI 2.0
Android 13 添加了对使用 USB 连接到 MIDI 2.0 设备的支持,USB 使用通用 MIDI 数据包 (UMP) 进行通信。Android 15 扩展了对虚拟 MIDI 应用的 UMP 支持,使合成器应用能够像对待 USB MIDI 2.0 设备一样将合成器应用作为虚拟 MIDI 2.0 设备进行控制。
رمزگشایی نرم افزار AV1 کارآمدتر
dav1d ، رمزگشای محبوب نرم افزار AV1 از VideoLAN برای دستگاه های اندرویدی که از رمزگشایی AV1 در سخت افزار پشتیبانی نمی کنند، در دسترس است. عملکرد dav1d تا 3 برابر بیشتر از رمزگشای نرمافزار AV1 قدیمی است و امکان پخش HD AV1 را برای کاربران بیشتری از جمله برخی دستگاههای سطح پایین و متوسط فراهم میکند.
برنامه شما باید با فراخوانی آن با نام "c2.android.av1-dav1d.decoder"
استفاده از dav1d را انتخاب کند. dav1d در به روز رسانی بعدی به عنوان رمزگشای پیش فرض نرم افزار AV1 تبدیل خواهد شد. این پشتیبانی استاندارد شده و برای دستگاههای Android 11 که بهروزرسانیهای سیستم Google Play را دریافت میکنند، پشتیبانی میشود.
بهره وری توسعه دهندگان و ابزار
در حالی که بیشتر کار ما برای بهبود بهرهوری شما حول ابزارهایی مانند Android Studio ، Jetpack Compose ، و کتابخانههای Android Jetpack متمرکز است، ما همیشه به دنبال راههایی در این پلتفرم هستیم تا به شما کمک کند راحتتر به دیدگاه خود پی ببرید.
به روز رسانی OpenJDK 17
اندروید 15 به کار تازه سازی کتابخانه های اصلی اندروید برای هماهنگی با ویژگی های آخرین نسخه OpenJDK LTS ادامه می دهد.
ویژگیها و بهبودهای کلیدی زیر شامل میشوند:
- بهبود کیفیت زندگی در اطراف بافرهای NIO
- جریان ها
- روشهای اضافی
math
وstrictmath
-
util
بسته شاملcollection
متوالی،map
وset
- پشتیبانی
ByteBuffer
درDeflater
- به روز رسانی های امنیتی مانند
X500PrivateCredential
و به روز رسانی های کلید امنیتی
این APIها در بیش از یک میلیارد دستگاه دارای Android 12 (سطح API 31) و بالاتر از طریق بهروزرسانیهای سیستم Google Play بهروزرسانی میشوند، بنابراین میتوانید آخرین ویژگیهای برنامهنویسی را هدف قرار دهید.
پیشرفت های PDF
اندروید 15 شامل بهبودهای قابل توجهی در APIهای PdfRenderer
است. برنامهها میتوانند ویژگیهای پیشرفتهای مانند ارائه فایلهای محافظتشده با رمز عبور ، حاشیهنویسی، ویرایش فرم ، جستجو و انتخاب با کپی را در خود جای دهند. بهینه سازی خطی PDF برای سرعت بخشیدن به مشاهده PDF محلی و کاهش استفاده از منابع پشتیبانی می شود. کتابخانه PDF Jetpack از این APIها برای ساده کردن افزودن قابلیت مشاهده PDF به برنامه شما استفاده می کند.
PdfRenderer
به ماژولی منتقل شده است که میتواند با استفاده از بهروزرسانیهای سیستم Google Play مستقل از نسخه پلتفرم بهروزرسانی شود، و ما با ایجاد یک نسخه سازگار پیش از Android 15 از این تغییرات به Android 11 (سطح API 30) پشتیبانی میکنیم. سطح API، به نام PdfRendererPreV
.
اصلاحات تغییر خودکار زبان
Android 14 增加了设备端音频中的多语言识别功能,可在语言之间自动切换,但这可能会导致单词丢失,尤其是在语言切换时,两种话语之间的停顿较少时。Android 15 添加了额外的控件,可帮助应用根据其用例调整此切换。EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS
会将自动切换限制为仅在音频会话开始时进行,而 EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES
则会在指定次数的切换后停用语言切换。如果您希望自动检测到会话期间只讲一种语言,这些选项特别有用。
API فونت متغیر 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های قدیمی و جدید آورده شده است:
در این مثال، Typeface
ایجاد شده با API قدیمی توانایی ایجاد وزن فونت های دقیق برای نمونه های Font
350، 450، 550 و 650 را ندارد، بنابراین رندر به نزدیک ترین وزن باز می گردد. بنابراین در این حالت به جای 350 عدد 300 و به جای 450 عدد 400 و به همین ترتیب رندر می شود. در مقابل، Typeface
ایجاد شده با APIهای جدید به صورت پویا یک نمونه Font
برای وزن مشخص ایجاد می کند، بنابراین وزن های دقیق برای 350، 450، 550 و 650 نیز ارائه می شود.
کنترل های شکست خط دانه ای
با شروع در اندروید 15، یک TextView
و خط شکن زیرین میتوانند بخش داده شده از متن را در همان خط حفظ کنند تا خوانایی را بهبود بخشند. شما می توانید با استفاده از تگ <nobreak>
در منابع رشته یا createNoBreakSpan
از این سفارشی سازی خط شکن استفاده کنید. به طور مشابه، میتوانید با استفاده از تگ <nohyphen>
یا createNoHyphenationSpan
، کلمات را از خط فاصله حفظ کنید.
به عنوان مثال، منبع رشته زیر شامل یک خط شکسته نمیشود و با متن «Pixel 8 Pro» رندر میشود. شکستن در محل نامطلوب:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
در مقابل، این منبع رشته شامل تگ <nobreak>
است که عبارت "Pixel 8 Pro" را میپیچد. و از شکستگی خطوط جلوگیری می کند:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
تفاوت در نحوه رندر شدن این رشته ها در تصاویر زیر نشان داده شده است:
بایگانی برنامه
Android و Google Play سال گذشته پشتیبانی از بایگانی برنامه را اعلام کردند و به کاربران این امکان را داد تا با حذف بخشی از برنامههای کم استفاده از دستگاه که با استفاده از Android App Bundle در Google Play منتشر شدهاند، فضا را آزاد کنند. اندروید 15 شامل پشتیبانی سطح سیستم عامل برای بایگانی و حذف بایگانی برنامه است که اجرای آن را برای همه فروشگاه های برنامه آسان تر می کند.
برنامههای دارای مجوز REQUEST_DELETE_PACKAGES
میتوانند با روش PackageInstaller
requestArchive
تماس بگیرند تا بایگانی یک بسته برنامه نصبشده را درخواست کنند، که APK و هر فایل حافظه پنهان را حذف میکند، اما دادههای کاربر را حفظ میکند. برنامه های آرشیو شده به عنوان برنامه های قابل نمایش از طریق API های LauncherApps
برگردانده می شوند. کاربران برای برجسته کردن آرشیو بودن آن برنامه ها، یک رابط کاربری را مشاهده خواهند کرد. اگر کاربر روی یک برنامه بایگانی شده ضربه بزند، نصب کننده مسئول درخواستی برای حذف بایگانی آن دریافت می کند و فرآیند بازیابی می تواند توسط پخش ACTION_PACKAGE_ADDED
نظارت شود.
گرافیک
اندروید 15 جدیدترین پیشرفتهای گرافیکی، از جمله ANGLE و اضافهشدهها به سیستم گرافیکی Canvas را به ارمغان میآورد.
مدرن کردن دسترسی به پردازنده گرافیکی اندروید
从早期开始,核心操作系统在单个 CPU 上运行,GPU 通过基于固定函数流水线的 API 进行访问,Android 硬件已经发生了很大变化。从 Android 7.0(API 级别 24)开始,NDK 中就已提供 Vulkan® 图形 API。它采用较低级别的抽象,可以更好地反映现代 GPU 硬件,能够更好地进行扩展以支持多个 CPU 核心,并可减少 CPU 驱动程序开销,从而提升应用性能。所有现代游戏引擎都支持 Vulkan。
Vulkan 是 Android 的 GPU 首选接口。因此,Android 15 包含 ANGLE 作为可选层,用于在 Vulkan 上运行 OpenGL® ES。迁移到 ANGLE 会将 Android OpenGL 实现标准化,以提高兼容性,在某些情况下还可提升性能。您可以使用 ANGLE 测试 OpenGL ES 应用的稳定性和性能,方法是在 Android 15 上依次点击设置 -> 系统 -> 开发者选项 -> 实验性功能:启用 ANGLE,启用开发者选项。
Vulkan 上的 Android ANGLE 路线图
作为简化 GPU 堆栈的一部分,今后我们将在更多新设备上以 GL 系统驱动程序的形式提供 ANGLE,预计未来将只能通过 ANGLE 使用 OpenGL/ES。不过,我们计划在所有设备上继续支持 OpenGL ES。
建议的后续措施
使用开发者选项选择适用于 OpenGL ES 的 ANGLE 驱动程序并测试您的应用。对于新项目,我们强烈建议您使用适用于 C/C++ 的 Vulkan。
بهبودهایی برای بوم
اندروید 15 به مدرن سازی سیستم گرافیکی Canvas اندروید با قابلیت های اضافی ادامه می دهد:
-
Matrix44
یک ماتریس 4x4 برای تبدیل مختصات ارائه می دهد که باید برای دستکاری بوم به صورت سه بعدی استفاده شود. -
clipShader
کلیپ فعلی را با سایهزن مشخص شده قطع میکند، در حالی کهclipOutShader
کلیپ را روی تفاوت کلیپ فعلی و سایهزن تنظیم میکند و هر کدام سایهزن را به عنوان یک ماسک آلفا در نظر میگیرند. این از ترسیم اشکال پیچیده به طور موثر پشتیبانی می کند.
عملکرد و باتری
Android به تمرکز خود بر کمک به شما در بهبود عملکرد و کیفیت برنامههایتان ادامه میدهد. Android 15 API هایی را معرفی می کند که به کارآمدتر کردن وظایف در برنامه شما برای اجرا، بهینه سازی عملکرد برنامه و جمع آوری اطلاعات بینش در مورد برنامه های شما کمک می کند.
برای بهترین روشهای کارآمد باتری، اشکالزدایی شبکه و مصرف انرژی، و جزئیات نحوه بهبود کارایی باتری در کار پسزمینه در Android 15 و نسخههای اخیر Android، به بهبود کارایی باتری کار پسزمینه در بحث Android از Google I/ مراجعه کنید. O.
ApplicationStartInfo API
在以前的 Android 版本中,应用启动有点神秘。在应用中确定应用是从冷状态、温状态还是热状态开始的过程很难确定。此外,我们也很难知道您的应用在不同发布阶段所用的时间:创建进程分支、调用 onCreate
、绘制第一帧等。在实例化 Application
类时,您无法得知应用是从广播、content provider、作业、备份、启动完成、闹钟还是 Activity
启动的。
Android 15 上的 ApplicationStartInfo
API 可提供所有这些功能以及更多其他功能。您甚至可以选择将自己的时间戳添加到流程中,以便在一个位置收集时间数据。除了收集指标之外,您还可以使用 ApplicationStartInfo
直接优化应用启动;例如,当应用因广播而启动时,您可以避免在 Application
类中实例化界面相关库的高成本。
اطلاعات دقیق اندازه برنامه
自 Android 8.0(API 级别 26)起,Android 就一直包含 StorageStats.getAppBytes
API,该 API 将应用的安装大小汇总为一个字节,这些字节是 APK 大小、从 APK 中提取的文件的大小以及设备上生成的文件(例如预先 (AOT) 编译代码)的总和。就应用的存储空间使用情况而言,此数字并不富有见解。
Android 15 增加了 StorageStats.getAppBytesByDataType([type])
API,可让您深入了解应用如何使用所有空间,包括 APK 文件拆分、AOT 和加速相关代码、dex 元数据、库和引导式配置文件。
پروفایل مدیریت شده توسط برنامه
Android 15 شامل کلاس ProfilingManager
است که به شما امکان می دهد اطلاعات پروفایل را از داخل برنامه خود جمع آوری کنید. ما قصد داریم این را با یک API Android Jetpack بپوشانیم که ساخت درخواستهای پروفایل را سادهتر میکند، اما API اصلی امکان جمعآوری heap dumps، heap profiles، stack sampling و موارد دیگر را فراهم میکند. این یک تگ ارائه شده برای شناسایی فایل خروجی که به دایرکتوری فایل های برنامه شما تحویل داده می شود، به برنامه شما پاسخ تماس می دهد. API برای به حداقل رساندن تأثیر عملکرد، نرخ را محدود می کند.
بهبود پایگاه داده SQLite
اندروید 15 APIهای SQLite را معرفی میکند که ویژگیهای پیشرفتهای را از موتور اصلی SQLite نشان میدهد که مشکلات عملکرد خاصی را که میتواند در برنامهها آشکار شود را هدف قرار میدهد.
توسعه دهندگان باید از بهترین شیوه ها برای عملکرد SQLite استفاده کنند تا بیشترین بهره را از پایگاه داده SQLite خود ببرند، به ویژه هنگام کار با پایگاه داده های بزرگ یا هنگام اجرای پرس و جوهای حساس به تأخیر.
- تراکنشهای معوق فقط خواندنی : هنگام صدور تراکنشهایی که فقط خواندنی هستند (شرایط نوشتن را شامل نمیشود)، از
beginTransactionReadOnly()
وbeginTransactionWithListenerReadOnly(SQLiteTransactionListener)
برای صدور تراکنشهایDEFERRED
فقط خواندنی استفاده کنید. چنین تراکنش هایی می توانند همزمان با یکدیگر اجرا شوند و اگر پایگاه داده در حالت WAL باشد، می توانند همزمان با تراکنش هایIMMEDIATE
یاEXCLUSIVE
اجرا شوند. - تعداد ردیف ها و شناسه ها : API ها برای بازیابی تعداد ردیف های تغییر یافته یا آخرین شناسه ردیف درج شده بدون ارسال درخواست اضافی اضافه شدند.
getLastChangedRowCount()
تعداد ردیفهایی را که توسط آخرین دستور SQL در تراکنش جاری درج، بهروزرسانی یا حذف شدهاند را برمیگرداند، در حالی کهgetTotalChangedRowCount()
تعداد اتصال فعلی را برمیگرداند.getLastInsertRowId()
rowid
آخرین ردیفی که باید در اتصال فعلی درج شود را برمی گرداند. - بیانیههای خام : یک بیانیه خام SQlite صادر کنید، با دور زدن بستهبندیهای راحت و هر سربار پردازش اضافی که ممکن است متحمل شوند.
بهروزرسانیهای چارچوب عملکرد پویا اندروید
Android 15 به سرمایه گذاری ما در Android Dynamic Performance Framework (ADPF) ادامه می دهد، مجموعه ای از API ها که به بازی ها و برنامه های فشرده عملکرد اجازه می دهد تا به طور مستقیم با سیستم های قدرت و حرارت دستگاه های Android ارتباط برقرار کنند. در دستگاههای پشتیبانیشده، Android 15 قابلیتهای ADPF را اضافه میکند:
- یک حالت بهره وری انرژی برای جلسات راهنمایی که نشان می دهد رشته های مرتبط آنها باید صرفه جویی در مصرف انرژی را به عملکرد ترجیح دهند، که برای بارهای کاری پس زمینه طولانی مدت عالی است.
- مدت زمان کار GPU و CPU را می توان هر دو در جلسات راهنمایی گزارش کرد و به سیستم اجازه می دهد فرکانس های CPU و GPU را با هم تنظیم کند تا به بهترین شکل نیازهای بار کاری را برآورده کند.
- آستانههای دمایی برای تفسیر وضعیت احتمالی درگیری حرارتی بر اساس پیشبینی فضای سر.
برای کسب اطلاعات بیشتر در مورد نحوه استفاده از ADPF در برنامه ها و بازی های خود، به مستندات مراجعه کنید .
حریم خصوصی
اندروید 15 دارای ویژگی های مختلفی است که به توسعه دهندگان اپلیکیشن کمک می کند تا از حریم خصوصی کاربران محافظت کنند.
تشخیص ضبط صفحه
اندروید 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>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:domain="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>
فضای خصوصی
فضای خصوصی به کاربران این امکان را می دهد که فضای جداگانه ای در دستگاه خود ایجاد کنند که در آن می توانند برنامه های حساس را از چشمان کنجکاو دور نگه دارند، زیر یک لایه دیگر از احراز هویت. فضای خصوصی از یک پروفایل کاربری مجزا استفاده می کند. کاربر می تواند انتخاب کند که از قفل دستگاه یا فاکتور قفل جداگانه برای فضای خصوصی استفاده کند.
برنامههای موجود در فضای خصوصی در یک محفظه جداگانه در راهانداز نمایش داده میشوند و وقتی فضای خصوصی قفل است از نمای اخیر، اعلانها، تنظیمات و از سایر برنامهها پنهان میشوند. محتوای تولید شده و دانلود شده توسط کاربر (مانند رسانه یا فایل ها) و حساب ها بین فضای خصوصی و فضای اصلی جدا می شوند. از اشتراکگذاری سیستم و انتخابگر عکس میتوان برای دسترسی برنامهها به محتوا در فضاهای مختلف زمانی که فضای خصوصی باز است استفاده کرد.
کاربران نمی توانند برنامه های موجود و داده های آنها را به فضای خصوصی منتقل کنند. در عوض، کاربران یک گزینه نصب را در فضای خصوصی برای نصب یک برنامه با استفاده از فروشگاه برنامه ای که ترجیح می دهند انتخاب می کنند. برنامههای موجود در فضای خصوصی بهعنوان نسخههای جداگانه از هر برنامهای در فضای اصلی (کپیهای جدید همان برنامه) نصب میشوند.
وقتی کاربر فضای خصوصی را قفل می کند، نمایه متوقف می شود. وقتی نمایه متوقف شده است، برنامههای موجود در فضای خصوصی دیگر فعال نیستند و نمیتوانند فعالیتهای پیشزمینه یا پسزمینه، از جمله نمایش اعلانها را انجام دهند.
توصیه می کنیم برنامه خود را با فضای خصوصی آزمایش کنید تا مطمئن شوید برنامه شما همانطور که انتظار می رود کار می کند، به خصوص اگر برنامه شما در یکی از دسته های زیر قرار می گیرد:
- برنامههایی با منطق برای نمایههای کاری که فرض میکنند هر نسخه نصبشده برنامهشان که در نمایه اصلی نیست، در نمایه کاری است.
- اپلیکیشن های پزشکی
- برنامه های راه اندازی
- اپلیکیشن های اپ استور
آخرین انتخاب کاربر را برای دسترسی به عکسهای انتخابی جستجو کنید
برنامهها اکنون میتوانند تنها عکسها و ویدیوهایی را که اخیراً انتخاب شدهاند، در صورت اعطای دسترسی جزئی به مجوزهای رسانه، برجسته کنند. این ویژگی میتواند تجربه کاربری را برای برنامههایی که اغلب درخواست دسترسی به عکسها و ویدیوها را دارند، بهبود بخشد. برای استفاده از این ویژگی در برنامه خود، هنگام درخواست 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 شامل جدیدترین برنامههای افزودنی Android Ad Services است که جدیدترین نسخه جعبه ایمنی حریم خصوصی در Android را در خود جای داده است. این افزوده بخشی از کار ما برای توسعه فناوریهایی است که حریم خصوصی کاربر را بهبود میبخشد و تجربههای تبلیغاتی شخصی و مؤثر را برای برنامههای تلفن همراه امکانپذیر میسازد. صفحه جعبه ایمنی حریم خصوصی ما اطلاعات بیشتری درباره Privacy Sandbox در برنامههای پیشنمایش برنامهنویس Android و بتا دارد تا به شما در شروع کار کمک کند.
Health Connect
Android 15 جدیدترین برنامههای افزودنی پیرامون Health Connect توسط Android را یکپارچه میکند، یک پلتفرم امن و متمرکز برای مدیریت و اشتراکگذاری دادههای سلامت و تناسب اندام جمعآوریشده توسط برنامه. این بهروزرسانی از انواع دادههای اضافی در تناسب اندام ، تغذیه ، دمای پوست، برنامههای تمرینی و موارد دیگر پشتیبانی میکند.
ردیابی دمای پوست به کاربران این امکان را می دهد که داده های دمایی دقیق تری را از یک دستگاه پوشیدنی یا دستگاه ردیابی دیگر ذخیره و به اشتراک بگذارند.
برنامه های تمرینی برنامه های تمرینی ساختاری برای کمک به کاربر برای دستیابی به اهداف تناسب اندام خود هستند. پشتیبانی برنامه های آموزشی شامل انواع اهداف تکمیل و عملکرد است:
- اهداف تکمیل در مورد کالری سوزانده شده ، مسافت ، مدت زمان ، تکرار ، و مراحل .
- اهداف عملکردی حول هرچه بیشتر تکرارها (AMRAP) ، آهنگ ، ضربان قلب ، قدرت ، میزان تلاش درک شده و سرعت .
درباره آخرین بهروزرسانیهای Health Connect در Android در تجربههای سازگار با Android Health از Google I/O در ساختمان، بیشتر بیاموزید.
اشتراک گذاری جزئی صفحه نمایش
اندروید 15 از اشتراکگذاری جزئی صفحه پشتیبانی میکند تا کاربران بتوانند تنها یک پنجره برنامه را بهجای کل صفحه دستگاه به اشتراک بگذارند یا ضبط کنند. این ویژگی که برای اولین بار در Android 14 QPR2 فعال شد، شامل تماسهای MediaProjection
است که به برنامه شما اجازه میدهد تا تجربه اشتراکگذاری جزئی صفحه را سفارشی کند. توجه داشته باشید که برای برنامههایی که Android 14 (سطح API 34) یا بالاتر را هدف قرار میدهند، رضایت کاربر برای هر جلسه ضبط MediaProjection
لازم است.
تجربه کاربری و رابط کاربری سیستم
اندروید 15 به توسعه دهندگان و کاربران برنامه کنترل و انعطاف بیشتری را برای پیکربندی دستگاه خود مطابق با نیازهایشان می دهد.
برای کسب اطلاعات بیشتر در مورد نحوه استفاده از آخرین پیشرفتها در Android 15 برای بهبود تجربه کاربری برنامه، به بحث بهبود تجربه کاربری برنامه Android خود از Google I/O مراجعه کنید.
پیشنمایشهای غنیتر ویجت با Generated Previews API
قبل از اندروید 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)
)
جریان مورد انتظار عبارت است از:
- در هر زمان، ارائهدهنده ویجت با
setWidgetPreview
تماس میگیرد. پیشنمایشهای ارائهشده درAppWidgetService
با سایر اطلاعات ارائهدهنده وجود دارند. -
setWidgetPreview
از طریقAppWidgetHost.onProvidersChanged
، میزبان ها را از پیش نمایش به روز شده مطلع می کند. در پاسخ، میزبان ویجت تمام اطلاعات ارائه دهنده خود را دوباره بارگیری می کند. - هنگام نمایش یک پیشنمایش ویجت، میزبان
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
允许应用自定义注意力机制
管理(勿扰)规则,并确定何时启用或停用
。Android 15 极大地增强了这些规则,旨在提高
用户体验。其中包含以下增强功能:
- 向
AutomaticZenRule
添加类型,让系统能够应用特殊类型 对某些规则的处理 - 向
AutomaticZenRule
添加图标,使模式更加丰富 易于识别。 - 将
triggerDescription
字符串添加到AutomaticZenRule
,用于描述 规则应当对用户生效的条件。 - 已添加
ZenDeviceEffects
更改为AutomaticZenRule
,从而允许规则触发灰度等操作 显示、夜间模式或调暗壁纸。
VibrationEffect را برای کانال های اعلان تنظیم کنید
Android 15 支持为传入的通知设置丰富的振动,方法是
频道使用的是NotificationChannel.setVibrationEffect
,因此
您的用户可以区分不同类型的通知
不需要看他们的设备
صفحه نمایش های بزرگ و عوامل شکل
Android 15 به برنامههای شما پشتیبانی میکند تا از فاکتورهای فرم اندروید، از جمله صفحهنمایشهای بزرگ، قابلیتهای تاشو، و تاشو نهایت استفاده را ببرند.
چندوظیفه ای با صفحه نمایش بزرگ بهبود یافته است
Android 15 为用户提供了在大屏设备上更好地进行多任务处理的方式。对于 例如,用户可以保存自己喜爱的分屏应用组合, 访问并固定屏幕上的任务栏,以便在应用之间快速切换。这意味着 让应用具备自适应能力比以往任何时候都更加重要。
Google I/O 大会上有一些关于构建自适应 Android 的会议 应用和使用 Material 3 构建界面 自适应库 我们的文档中提供了更多帮助信息,帮助您针对大型语言 。
پشتیبانی از صفحه نمایش پوششی
您的应用可以声明一项属性,Android 15 会使用该属性将您的 Application
或 Activity
呈现在支持的可翻转设备的小封面屏幕上。这些屏幕太小,无法被视为 Android 应用的兼容目标,但您的应用可以选择支持这些屏幕,从而让您的应用可在更多位置使用。
قابلیت اتصال
Android 15 پلتفرم را به روز می کند تا برنامه شما به آخرین پیشرفت ها در زمینه ارتباطات و فناوری های بی سیم دسترسی داشته باشد.
پشتیبانی ماهواره ای
Android 15 继续扩展对卫星连接的平台支持,并添加了一些界面元素,以确保在卫星连接环境中提供一致的用户体验。
应用可以使用 ServiceState.isUsingNonTerrestrialNetwork()
检测设备何时连接到卫星,从而更好地了解为什么全网络服务不可用。此外,Android 15 支持短信和彩信应用以及预加载的 RCS 应用,以便使用卫星连接收发信息。
تجربه های روان تر NFC
Android 15 در تلاش است تا تجربه پرداخت یکپارچهتر و قابلاطمینانتر را ایجاد کند و در عین حال به پشتیبانی از اکوسیستم قدرتمند برنامه NFC اندروید ادامه دهد. در دستگاههای پشتیبانیشده، برنامهها میتوانند از NfcAdapter
درخواست کنند تا وارد حالت مشاهده شود، جایی که دستگاه گوش میدهد اما به خوانندههای NFC پاسخ نمیدهد و اشیاء PollingFrame
سرویس NFC برنامه را برای پردازش ارسال میکند. اشیاء PollingFrame
را می توان برای احراز هویت قبل از اولین ارتباط با خواننده NFC استفاده کرد که در بسیاری از موارد امکان تراکنش با یک ضربه را فراهم می کند.
علاوه بر این، برنامهها میتوانند فیلتری را روی دستگاههای پشتیبانیشده ثبت کنند تا بتوانند از فعالیت حلقه نظرسنجی مطلع شوند، که امکان عملکرد روان با چندین برنامه کاربردی NFC آگاه را فراهم میکند.
نقش کیف پول
اندروید 15 نقش کیف پول را معرفی میکند که اجازه میدهد با برنامه کیف پول ترجیحی کاربر یکپارچهتر شود. این نقش جایگزین تنظیم پیشفرض پرداخت بدون تماس NFC میشود. کاربران می توانند با رفتن به تنظیمات > برنامه ها > برنامه های پیش فرض، دارنده نقش Wallet را مدیریت کنند.
نقش Wallet هنگام مسیریابی شیرهای NFC برای ایدزهای ثبت شده در دسته پرداخت استفاده می شود. ضربه ها همیشه به دارنده نقش Wallet می روند مگر اینکه برنامه دیگری که برای همان AID ثبت شده باشد در پیش زمینه اجرا شود.
این نقش همچنین برای تعیین محل قرار گرفتن کاشی دسترسی سریع کیف پول هنگام فعال شدن استفاده می شود. وقتی نقش روی «هیچکدام» تنظیم شود، کاشی دسترسی سریع در دسترس نیست و ضربههای NFC دسته پرداخت فقط به برنامه پیشزمینه تحویل داده میشود.
امنیت
Android 15 به شما کمک می کند امنیت برنامه خود را افزایش دهید، از داده های برنامه خود محافظت کنید، و به کاربران شفافیت و کنترل بیشتری بر روی داده های خود می دهد. برای اطلاعات بیشتر در مورد کارهایی که برای بهبود ایمنی کاربر و محافظت از برنامه شما در برابر تهدیدات جدید انجام می دهیم، گفتگوی حفاظت از امنیت کاربر در Android را از Google I/O ببینید.
مدیریت اعتبار را با تکمیل خودکار ادغام کنید
Starting with Android 15, developers can link specific views like username or password fields with Credential Manager requests, making it easier to provide a tailored user experience during the sign-in process. When the user focuses on one of these views, a corresponding request is sent to Credential Manager. The resulting credentials are aggregated across providers and displayed in autofill fallback UIs, such as inline suggestions or drop-down suggestions. The Jetpack androidx.credentials library is the preferred endpoint for developers to use and will soon be available to further enhance this feature in Android 15 and higher.
ثبتنام و ورود با یک ضربه را با اعلانهای بیومتریک ادغام کنید
Credential Manager integrates biometric prompts into the credential creation and sign-in processes, eliminating the need for providers to manage biometric prompts. As a result, credential providers only need to focus on the results of the create and get flows, augmented with the biometric flow result. This simplified process creates a more efficient and streamlined credential creation and retrieval process.
مدیریت کلید برای رمزگذاری سرتاسر
我们在 Android 15 中引入了 E2eeContactKeysManager
,它提供用于存储加密公钥的操作系统级 API,有助于 Android 应用中的端到端加密 (E2EE)。
E2eeContactKeysManager
旨在与平台通讯录应用集成,使用户能够集中管理和验证其联系人的公钥。
مجوزهای URI محتوا را بررسی می کند
اندروید 15 مجموعهای از APIها را معرفی میکند که بررسیهای مجوز را روی URI محتوا انجام میدهند:
-
Context.checkContentUriPermissionFull
: این یک بررسی کامل مجوز در URIهای محتوا را انجام می دهد. - ویژگی مانیفست
Activity
requireContentUriPermissionFromCaller
: این مجوزهای مشخص شده را در URIهای محتوای ارائه شده در هنگام راه اندازی فعالیت اعمال می کند. - کلاس
ComponentCaller
برای تماس گیرندگانActivity
: این نشان دهنده برنامه ای است که فعالیت را راه اندازی کرده است.
دسترسی
اندروید 15 ویژگی هایی را اضافه می کند که دسترسی کاربران را بهبود می بخشد.
خط بریل بهتر
在 Android 15 中,TalkBack 可以支持通过 USB 和安全蓝牙使用 HID 标准的盲文显示屏。
此标准与鼠标和键盘使用的标准非常相似,有助于 Android 随着时间的推移而支持更广泛的盲文显示屏。
بین المللی شدن
اندروید 15 ویژگیها و قابلیتهایی را اضافه میکند که تجربه کاربر را در هنگام استفاده از دستگاه به زبانهای مختلف تکمیل میکند.
فونت متغیر CJK
با شروع Android 15، فایل فونت برای زبان های چینی، ژاپنی و کره ای (CJK)، NotoSansCJK، اکنون یک فونت متغیر است. فونت های متغیر فرصت هایی را برای تایپوگرافی خلاقانه در زبان های CJK باز می کنند. طراحان میتوانند طیف وسیعتری از سبکها را بررسی کنند و طرحبندیهای بصری چشمگیری ایجاد کنند که قبلاً دستیابی به آنها دشوار یا غیرممکن بود.
توجیه بین شخصیتی
با شروع Android 15، متن را می توان با استفاده از فاصله حروف با استفاده از JUSTIFICATION_MODE_INTER_CHARACTER
توجیه کرد. توجیه بین کلمه ای برای اولین بار در اندروید 8.0 (سطح API 26) معرفی شد و توجیه بین نویسه ها قابلیت های مشابهی را برای زبان هایی که از کاراکتر فضای خالی برای تقسیم بندی استفاده می کنند، مانند چینی، ژاپنی و غیره ارائه می دهد.
پیکربندی خودکار شکست خط
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_NONE
، همانطور که در تصویر زیر نشان داده شده است:
فونت ژاپنی Hentaigana اضافی
در اندروید 15، یک فایل فونت برای هیراگانای ژاپنی قدیمی (معروف به Hentaigana) به طور پیش فرض همراه است. اشکال منحصربهفرد شخصیتهای هنتایگانا میتواند استعدادی متمایز به آثار هنری یا طراحی اضافه کند و در عین حال به حفظ انتقال دقیق و درک اسناد باستانی ژاپنی کمک کند.
VideoLAN 锥形版权所有 (c) 1996-2010 VideoLAN。任何人都可以使用或修改此徽标或修改版本来指代 VideoLAN 项目或 VideoLAN 团队开发的任何产品,但不表示该项目的认可。
Vulkan 和 Vulkan 徽标是 Khronos Group Inc.的注册商标。
OpenGL 是注册商标,OpenGL ES 徽标是 Khronos 许可使用的 Hewlett Packard Enterprise 商标。
،اندروید 15 ویژگی ها و API های عالی را برای توسعه دهندگان معرفی می کند. بخشهای زیر این ویژگیها را خلاصه میکنند تا به شما در شروع کار با APIهای مرتبط کمک کنند.
برای فهرست دقیق APIهای اضافه شده، اصلاح شده و حذف شده، گزارش تفاوت API را بخوانید. برای جزئیات بیشتر در مورد APIهای اضافه شده به مرجع Android API مراجعه کنید — برای Android 15، به دنبال APIهایی باشید که در سطح API 35 اضافه شده اند. برای اطلاع از مناطقی که تغییرات پلت فرم ممکن است بر برنامه های شما تأثیر بگذارد، حتماً تغییرات رفتار Android 15 را برای برنامه هایی که اندروید 15 و برای همه برنامه ها را هدف قرار دهید.
دوربین و رسانه
اندروید 15 شامل ویژگیهای مختلفی است که تجربه دوربین و رسانه را بهبود میبخشد و به شما امکان میدهد به ابزارها و سختافزارهایی برای حمایت از سازندگان برای زنده کردن دیدگاهشان در اندروید دسترسی داشته باشید.
برای اطلاعات بیشتر در مورد جدیدترین ویژگیها و راهحلهای برنامهنویس برای رسانه و دوربین Android، به بحث ساخت رسانهها و تجربههای دوربین مدرن Android از Google I/O مراجعه کنید.
تقویت نور کم
اندروید 15 کم نور ، حالت نوردهی خودکار را معرفی می کند که هم برای دوربین 2 و هم برای پسوند دوربین حالت شب در دسترس است. Low Light Boost نوردهی جریان پیش نمایش را در شرایط کم نور تنظیم می کند. این با نحوه ایجاد تصاویر ثابت توسط پسوند دوربین حالت شب متفاوت است، زیرا حالت شب مجموعه ای از عکس ها را برای ایجاد یک تصویر واحد و پیشرفته ترکیب می کند. در حالی که حالت شب برای ایجاد یک تصویر ثابت بسیار خوب عمل می کند، نمی تواند یک جریان مداوم از فریم ها ایجاد کند، اما Low Light Boost می تواند. بنابراین، Low Light Boost قابلیت های دوربین را فعال می کند، مانند:
- ارائه یک پیشنمایش تصویر پیشرفته، بنابراین کاربران بهتر میتوانند عکسهای خود را در نور کم قاب کنند
- اسکن کدهای QR در نور کم
اگر Low Light Boost را فعال کنید، هنگامی که سطح نور کم باشد به طور خودکار روشن می شود و زمانی که نور بیشتر باشد خاموش می شود.
برنامهها میتوانند جریان پیشنمایش را در شرایط کمنور ضبط کنند تا یک ویدیوی روشن را ذخیره کنند.
برای اطلاعات بیشتر، Low Light Boost را ببینید.
کنترل های دوربین درون برنامه ای
اندروید 15 یک افزونه برای کنترل بیشتر بر سخت افزار دوربین و الگوریتم های آن در دستگاه های پشتیبانی شده اضافه می کند:
- تنظیمات پیشرفته قدرت فلاش که امکان کنترل دقیق شدت فلاش را در هر دو حالت
SINGLE
وTORCH
در هنگام ثبت تصاویر فراهم می کند.
کنترل فضای سر HDR
Android 15 会选择适合底层设备功能和面板的位深的 HDR 余量。对于包含大量 SDR 内容的页面(例如显示单个 HDR 缩略图的即时通讯应用),此行为最终可能会对 SDR 内容的感知亮度产生不利影响。Android 15 允许您使用 setDesiredHdrHeadroom
控制 HDR 余量,以在 SDR 和 HDR 内容之间取得平衡。
کنترل بلندی صدا
اندروید 15 از استاندارد بلندی صدای CTA-2075 پشتیبانی می کند تا به شما کمک کند از تناقضات بلندی صدا جلوگیری کنید و اطمینان حاصل کنید که کاربران مجبور نیستند به طور مداوم صدا را هنگام جابجایی بین محتوا تنظیم کنند. این سیستم از ویژگی های شناخته شده دستگاه های خروجی (هدفون و بلندگو) به همراه ابرداده بلندی صدای موجود در محتوای صوتی AAC استفاده می کند تا به طور هوشمندانه میزان بلندی صدا و تراکم دامنه پویا را تنظیم کند.
برای فعال کردن این ویژگی، باید مطمئن شوید که ابرداده بلندی صدا در محتوای AAC شما موجود است و ویژگی پلتفرم را در برنامه خود فعال کنید. برای این کار ، شما با فراخوانی روش ایجاد کارخانه با شناسه جلسه صوتی از AudioTrack
مرتبط ، یک شیء LoudnessCodecController
را فوری می کنید. این به طور خودکار شروع به اعمال به روز رسانی های صوتی می کند. می توانید یک OnLoudnessCodecUpdateListener
را برای اصلاح یا فیلتر کردن پارامترهای بلندی صدا قبل از اعمال آنها در 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 همچنین برای استفاده از API های LoudnessCodecController
برای یکپارچه سازی یکپارچه برنامه به روز می شود.
دستگاه های مجازی MIDI 2.0
Android 13 添加了对使用 USB 连接到 MIDI 2.0 设备的支持,USB 使用通用 MIDI 数据包 (UMP) 进行通信。Android 15 扩展了对虚拟 MIDI 应用的 UMP 支持,使合成器应用能够像对待 USB MIDI 2.0 设备一样将合成器应用作为虚拟 MIDI 2.0 设备进行控制。
رمزگشایی نرم افزار AV1 کارآمدتر
dav1d ، رمزگشای محبوب نرم افزار AV1 از VideoLAN برای دستگاه های اندرویدی که از رمزگشایی AV1 در سخت افزار پشتیبانی نمی کنند، در دسترس است. عملکرد dav1d تا 3 برابر بیشتر از رمزگشای نرمافزار AV1 قدیمی است و امکان پخش HD AV1 را برای کاربران بیشتری از جمله برخی دستگاههای سطح پایین و متوسط فراهم میکند.
برنامه شما باید با فراخوانی آن با نام "c2.android.av1-dav1d.decoder"
استفاده از dav1d را انتخاب کند. dav1d در به روز رسانی بعدی به عنوان رمزگشای پیش فرض نرم افزار AV1 تبدیل خواهد شد. این پشتیبانی استاندارد شده و برای دستگاههای Android 11 که بهروزرسانیهای سیستم Google Play را دریافت میکنند، پشتیبانی میشود.
بهره وری توسعه دهندگان و ابزار
در حالی که بیشتر کار ما برای بهبود بهرهوری شما حول ابزارهایی مانند Android Studio ، Jetpack Compose ، و کتابخانههای Android Jetpack متمرکز است، ما همیشه به دنبال راههایی در این پلتفرم هستیم تا به شما کمک کند راحتتر به دیدگاه خود پی ببرید.
به روز رسانی OpenJDK 17
اندروید 15 به کار تازه سازی کتابخانه های اصلی اندروید برای هماهنگی با ویژگی های آخرین نسخه OpenJDK LTS ادامه می دهد.
ویژگیها و بهبودهای کلیدی زیر شامل میشوند:
- بهبود کیفیت زندگی در اطراف بافرهای NIO
- جریان ها
- روشهای اضافی
math
وstrictmath
-
util
بسته شاملcollection
متوالی،map
وset
- پشتیبانی
ByteBuffer
درDeflater
- به روز رسانی های امنیتی مانند
X500PrivateCredential
و به روز رسانی های کلید امنیتی
این APIها در بیش از یک میلیارد دستگاه دارای Android 12 (سطح API 31) و بالاتر از طریق بهروزرسانیهای سیستم Google Play بهروزرسانی میشوند، بنابراین میتوانید آخرین ویژگیهای برنامهنویسی را هدف قرار دهید.
پیشرفت های PDF
اندروید 15 شامل بهبودهای قابل توجهی در APIهای PdfRenderer
است. برنامهها میتوانند ویژگیهای پیشرفتهای مانند ارائه فایلهای محافظتشده با رمز عبور ، حاشیهنویسی، ویرایش فرم ، جستجو و انتخاب با کپی را در خود جای دهند. بهینه سازی خطی PDF برای سرعت بخشیدن به مشاهده PDF محلی و کاهش استفاده از منابع پشتیبانی می شود. کتابخانه PDF Jetpack از این APIها برای ساده کردن افزودن قابلیت مشاهده PDF به برنامه شما استفاده می کند.
PdfRenderer
به ماژولی منتقل شده است که میتواند با استفاده از بهروزرسانیهای سیستم Google Play مستقل از نسخه پلتفرم بهروزرسانی شود، و ما با ایجاد یک نسخه سازگار پیش از Android 15 از این تغییرات به Android 11 (سطح API 30) پشتیبانی میکنیم. سطح API، به نام PdfRendererPreV
.
اصلاحات تغییر خودکار زبان
Android 14 增加了设备端音频中的多语言识别功能,可在语言之间自动切换,但这可能会导致单词丢失,尤其是在语言切换时,两种话语之间的停顿较少时。Android 15 添加了额外的控件,可帮助应用根据其用例调整此切换。EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS
会将自动切换限制为仅在音频会话开始时进行,而 EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES
则会在指定次数的切换后停用语言切换。如果您希望自动检测到会话期间只讲一种语言,这些选项特别有用。
API فونت متغیر 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های قدیمی و جدید آورده شده است:
در این مثال، Typeface
ایجاد شده با API قدیمی توانایی ایجاد وزن فونت های دقیق برای نمونه های Font
350، 450، 550 و 650 را ندارد، بنابراین رندر به نزدیک ترین وزن باز می گردد. بنابراین در این حالت به جای 350 عدد 300 و به جای 450 عدد 400 و به همین ترتیب رندر می شود. در مقابل، Typeface
ایجاد شده با APIهای جدید به صورت پویا یک نمونه Font
برای وزن مشخص ایجاد می کند، بنابراین وزن های دقیق برای 350، 450، 550 و 650 نیز ارائه می شود.
کنترل های شکست خط دانه ای
با شروع در اندروید 15، یک TextView
و خط شکن زیرین میتوانند بخش داده شده از متن را در همان خط حفظ کنند تا خوانایی را بهبود بخشند. شما می توانید با استفاده از تگ <nobreak>
در منابع رشته یا createNoBreakSpan
از این سفارشی سازی خط شکن استفاده کنید. به طور مشابه، میتوانید با استفاده از تگ <nohyphen>
یا createNoHyphenationSpan
، کلمات را از خط فاصله حفظ کنید.
به عنوان مثال، منبع رشته زیر شامل یک خط شکسته نمیشود و با متن «Pixel 8 Pro» رندر میشود. شکستن در محل نامطلوب:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
در مقابل، این منبع رشته شامل تگ <nobreak>
است که عبارت "Pixel 8 Pro" را میپیچد. و از شکستگی خطوط جلوگیری می کند:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
تفاوت در نحوه رندر شدن این رشته ها در تصاویر زیر نشان داده شده است:
بایگانی برنامه
Android و Google Play سال گذشته پشتیبانی از بایگانی برنامه را اعلام کردند و به کاربران این امکان را داد تا با حذف بخشی از برنامههای کم استفاده از دستگاه که با استفاده از Android App Bundle در Google Play منتشر شدهاند، فضا را آزاد کنند. اندروید 15 شامل پشتیبانی سطح سیستم عامل برای بایگانی و حذف بایگانی برنامه است که اجرای آن را برای همه فروشگاه های برنامه آسان تر می کند.
برنامههای دارای مجوز REQUEST_DELETE_PACKAGES
میتوانند با روش PackageInstaller
requestArchive
تماس بگیرند تا بایگانی یک بسته برنامه نصبشده را درخواست کنند، که APK و هر فایل حافظه پنهان را حذف میکند، اما دادههای کاربر را حفظ میکند. برنامه های آرشیو شده به عنوان برنامه های قابل نمایش از طریق API های LauncherApps
برگردانده می شوند. کاربران برای برجسته کردن آرشیو بودن آن برنامه ها، یک رابط کاربری را مشاهده خواهند کرد. اگر کاربر روی یک برنامه بایگانی شده ضربه بزند، نصب کننده مسئول درخواستی برای حذف بایگانی آن دریافت می کند و فرآیند بازیابی می تواند توسط پخش ACTION_PACKAGE_ADDED
نظارت شود.
گرافیک
اندروید 15 جدیدترین پیشرفتهای گرافیکی، از جمله ANGLE و اضافهشدهها به سیستم گرافیکی Canvas را به ارمغان میآورد.
مدرن کردن دسترسی به پردازنده گرافیکی اندروید
从早期开始,核心操作系统在单个 CPU 上运行,GPU 通过基于固定函数流水线的 API 进行访问,Android 硬件已经发生了很大变化。从 Android 7.0(API 级别 24)开始,NDK 中就已提供 Vulkan® 图形 API。它采用较低级别的抽象,可以更好地反映现代 GPU 硬件,能够更好地进行扩展以支持多个 CPU 核心,并可减少 CPU 驱动程序开销,从而提升应用性能。所有现代游戏引擎都支持 Vulkan。
Vulkan 是 Android 的 GPU 首选接口。因此,Android 15 包含 ANGLE 作为可选层,用于在 Vulkan 上运行 OpenGL® ES。迁移到 ANGLE 会将 Android OpenGL 实现标准化,以提高兼容性,在某些情况下还可提升性能。您可以使用 ANGLE 测试 OpenGL ES 应用的稳定性和性能,方法是在 Android 15 上依次点击设置 -> 系统 -> 开发者选项 -> 实验性功能:启用 ANGLE,启用开发者选项。
Vulkan 上的 Android ANGLE 路线图
作为简化 GPU 堆栈的一部分,今后我们将在更多新设备上以 GL 系统驱动程序的形式提供 ANGLE,预计未来将只能通过 ANGLE 使用 OpenGL/ES。不过,我们计划在所有设备上继续支持 OpenGL ES。
建议的后续措施
使用开发者选项选择适用于 OpenGL ES 的 ANGLE 驱动程序并测试您的应用。对于新项目,我们强烈建议您使用适用于 C/C++ 的 Vulkan。
بهبودهایی برای بوم
اندروید 15 به مدرن سازی سیستم گرافیکی Canvas اندروید با قابلیت های اضافی ادامه می دهد:
-
Matrix44
یک ماتریس 4x4 برای تبدیل مختصات ارائه می دهد که باید برای دستکاری بوم به صورت سه بعدی استفاده شود. -
clipShader
کلیپ فعلی را با سایهزن مشخص شده قطع میکند، در حالی کهclipOutShader
کلیپ را روی تفاوت کلیپ فعلی و سایهزن تنظیم میکند و هر کدام سایهزن را به عنوان یک ماسک آلفا در نظر میگیرند. این از ترسیم اشکال پیچیده به طور موثر پشتیبانی می کند.
عملکرد و باتری
Android به تمرکز خود بر کمک به شما در بهبود عملکرد و کیفیت برنامههایتان ادامه میدهد. Android 15 API هایی را معرفی می کند که به کارآمدتر کردن وظایف در برنامه شما برای اجرا، بهینه سازی عملکرد برنامه و جمع آوری اطلاعات بینش در مورد برنامه های شما کمک می کند.
برای بهترین روشهای کارآمد باتری، اشکالزدایی شبکه و مصرف انرژی، و جزئیات نحوه بهبود کارایی باتری در کار پسزمینه در Android 15 و نسخههای اخیر Android، به بهبود کارایی باتری کار پسزمینه در بحث Android از Google I/ مراجعه کنید. O.
ApplicationStartInfo API
在以前的 Android 版本中,应用启动有点神秘。在应用中确定应用是从冷状态、温状态还是热状态开始的过程很难确定。此外,我们也很难知道您的应用在不同发布阶段所用的时间:创建进程分支、调用 onCreate
、绘制第一帧等。在实例化 Application
类时,您无法得知应用是从广播、content provider、作业、备份、启动完成、闹钟还是 Activity
启动的。
Android 15 上的 ApplicationStartInfo
API 可提供所有这些功能以及更多其他功能。您甚至可以选择将自己的时间戳添加到流程中,以便在一个位置收集时间数据。除了收集指标之外,您还可以使用 ApplicationStartInfo
直接优化应用启动;例如,当应用因广播而启动时,您可以避免在 Application
类中实例化界面相关库的高成本。
اطلاعات دقیق اندازه برنامه
自 Android 8.0(API 级别 26)起,Android 就一直包含 StorageStats.getAppBytes
API,该 API 将应用的安装大小汇总为一个字节,这些字节是 APK 大小、从 APK 中提取的文件的大小以及设备上生成的文件(例如预先 (AOT) 编译代码)的总和。就应用的存储空间使用情况而言,此数字并不富有见解。
Android 15 增加了 StorageStats.getAppBytesByDataType([type])
API,可让您深入了解应用如何使用所有空间,包括 APK 文件拆分、AOT 和加速相关代码、dex 元数据、库和引导式配置文件。
پروفایل مدیریت شده توسط برنامه
Android 15 شامل کلاس ProfilingManager
است که به شما امکان می دهد اطلاعات پروفایل را از داخل برنامه خود جمع آوری کنید. ما قصد داریم این را با یک API Android Jetpack بپوشانیم که ساخت درخواستهای پروفایل را سادهتر میکند، اما API اصلی امکان جمعآوری heap dumps، heap profiles، stack sampling و موارد دیگر را فراهم میکند. این یک تگ ارائه شده برای شناسایی فایل خروجی که به دایرکتوری فایل های برنامه شما تحویل داده می شود، به برنامه شما پاسخ تماس می دهد. API برای به حداقل رساندن تأثیر عملکرد، نرخ را محدود می کند.
بهبود پایگاه داده SQLite
اندروید 15 APIهای SQLite را معرفی میکند که ویژگیهای پیشرفتهای را از موتور اصلی SQLite نشان میدهد که مشکلات عملکرد خاصی را که میتواند در برنامهها آشکار شود را هدف قرار میدهد.
توسعه دهندگان باید از بهترین شیوه ها برای عملکرد SQLite استفاده کنند تا بیشترین بهره را از پایگاه داده SQLite خود ببرند، به ویژه هنگام کار با پایگاه داده های بزرگ یا هنگام اجرای پرس و جوهای حساس به تأخیر.
- تراکنشهای معوق فقط خواندنی : هنگام صدور تراکنشهایی که فقط خواندنی هستند (شرایط نوشتن را شامل نمیشود)، از
beginTransactionReadOnly()
وbeginTransactionWithListenerReadOnly(SQLiteTransactionListener)
برای صدور تراکنشهایDEFERRED
فقط خواندنی استفاده کنید. چنین تراکنش هایی می توانند همزمان با یکدیگر اجرا شوند و اگر پایگاه داده در حالت WAL باشد، می توانند همزمان با تراکنش هایIMMEDIATE
یاEXCLUSIVE
اجرا شوند. - تعداد ردیف ها و شناسه ها : API ها برای بازیابی تعداد ردیف های تغییر یافته یا آخرین شناسه ردیف درج شده بدون ارسال درخواست اضافی اضافه شدند.
getLastChangedRowCount()
تعداد ردیفهایی را که توسط آخرین دستور SQL در تراکنش جاری درج، بهروزرسانی یا حذف شدهاند را برمیگرداند، در حالی کهgetTotalChangedRowCount()
تعداد اتصال فعلی را برمیگرداند.getLastInsertRowId()
rowid
آخرین ردیفی که باید در اتصال فعلی درج شود را برمی گرداند. - بیانیههای خام : یک بیانیه خام SQlite صادر کنید، با دور زدن بستهبندیهای راحت و هر سربار پردازش اضافی که ممکن است متحمل شوند.
بهروزرسانیهای چارچوب عملکرد پویا اندروید
Android 15 به سرمایه گذاری ما در Android Dynamic Performance Framework (ADPF) ادامه می دهد، مجموعه ای از API ها که به بازی ها و برنامه های فشرده عملکرد اجازه می دهد تا به طور مستقیم با سیستم های قدرت و حرارت دستگاه های Android ارتباط برقرار کنند. در دستگاههای پشتیبانیشده، Android 15 قابلیتهای ADPF را اضافه میکند:
- یک حالت بهره وری انرژی برای جلسات راهنمایی که نشان می دهد رشته های مرتبط آنها باید صرفه جویی در مصرف انرژی را به عملکرد ترجیح دهند، که برای بارهای کاری پس زمینه طولانی مدت عالی است.
- مدت زمان کار GPU و CPU را می توان هر دو در جلسات راهنمایی گزارش کرد و به سیستم اجازه می دهد فرکانس های CPU و GPU را با هم تنظیم کند تا به بهترین شکل نیازهای بار کاری را برآورده کند.
- آستانههای دمایی برای تفسیر وضعیت احتمالی درگیری حرارتی بر اساس پیشبینی فضای سر.
برای کسب اطلاعات بیشتر در مورد نحوه استفاده از ADPF در برنامه ها و بازی های خود، به مستندات مراجعه کنید .
حریم خصوصی
اندروید 15 دارای ویژگی های مختلفی است که به توسعه دهندگان اپلیکیشن کمک می کند تا از حریم خصوصی کاربران محافظت کنند.
تشخیص ضبط صفحه
اندروید 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>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:domain="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>
فضای خصوصی
فضای خصوصی به کاربران این امکان را می دهد که فضای جداگانه ای در دستگاه خود ایجاد کنند که در آن می توانند برنامه های حساس را از چشمان کنجکاو دور نگه دارند، زیر یک لایه دیگر از احراز هویت. فضای خصوصی از یک پروفایل کاربری مجزا استفاده می کند. کاربر می تواند انتخاب کند که از قفل دستگاه یا فاکتور قفل جداگانه برای فضای خصوصی استفاده کند.
برنامههای موجود در فضای خصوصی در یک محفظه جداگانه در راهانداز نمایش داده میشوند و وقتی فضای خصوصی قفل است از نمای اخیر، اعلانها، تنظیمات و از سایر برنامهها پنهان میشوند. محتوای تولید شده و دانلود شده توسط کاربر (مانند رسانه یا فایل ها) و حساب ها بین فضای خصوصی و فضای اصلی جدا می شوند. از اشتراکگذاری سیستم و انتخابگر عکس میتوان برای دسترسی برنامهها به محتوا در فضاهای مختلف زمانی که فضای خصوصی باز است استفاده کرد.
کاربران نمی توانند برنامه های موجود و داده های آنها را به فضای خصوصی منتقل کنند. در عوض، کاربران یک گزینه نصب را در فضای خصوصی برای نصب یک برنامه با استفاده از فروشگاه برنامه ای که ترجیح می دهند انتخاب می کنند. برنامههای موجود در فضای خصوصی بهعنوان نسخههای جداگانه از هر برنامهای در فضای اصلی (کپیهای جدید همان برنامه) نصب میشوند.
وقتی کاربر فضای خصوصی را قفل می کند، نمایه متوقف می شود. وقتی نمایه متوقف شده است، برنامههای موجود در فضای خصوصی دیگر فعال نیستند و نمیتوانند فعالیتهای پیشزمینه یا پسزمینه، از جمله نمایش اعلانها را انجام دهند.
توصیه می کنیم برنامه خود را با فضای خصوصی آزمایش کنید تا مطمئن شوید برنامه شما همانطور که انتظار می رود کار می کند، به خصوص اگر برنامه شما در یکی از دسته های زیر قرار می گیرد:
- برنامههایی با منطق برای نمایههای کاری که فرض میکنند هر نسخه نصبشده برنامهشان که در نمایه اصلی نیست، در نمایه کاری است.
- اپلیکیشن های پزشکی
- برنامه های راه اندازی
- اپلیکیشن های اپ استور
آخرین انتخاب کاربر را برای دسترسی به عکسهای انتخابی جستجو کنید
برنامهها اکنون میتوانند تنها عکسها و ویدیوهایی را که اخیراً انتخاب شدهاند، در صورت اعطای دسترسی جزئی به مجوزهای رسانه، برجسته کنند. این ویژگی میتواند تجربه کاربری را برای برنامههایی که اغلب درخواست دسترسی به عکسها و ویدیوها را دارند، بهبود بخشد. برای استفاده از این ویژگی در برنامه خود، هنگام درخواست 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 شامل جدیدترین برنامههای افزودنی Android Ad Services است که جدیدترین نسخه جعبه ایمنی حریم خصوصی در Android را در خود جای داده است. این افزوده بخشی از کار ما برای توسعه فناوریهایی است که حریم خصوصی کاربر را بهبود میبخشد و تجربههای تبلیغاتی شخصی و مؤثر را برای برنامههای تلفن همراه امکانپذیر میسازد. صفحه جعبه ایمنی حریم خصوصی ما اطلاعات بیشتری درباره Privacy Sandbox در برنامههای پیشنمایش برنامهنویس Android و بتا دارد تا به شما در شروع کار کمک کند.
Health Connect
Android 15 جدیدترین برنامههای افزودنی پیرامون Health Connect توسط Android را یکپارچه میکند، یک پلتفرم امن و متمرکز برای مدیریت و اشتراکگذاری دادههای سلامت و تناسب اندام جمعآوریشده توسط برنامه. این بهروزرسانی از انواع دادههای اضافی در تناسب اندام ، تغذیه ، دمای پوست، برنامههای تمرینی و موارد دیگر پشتیبانی میکند.
ردیابی دمای پوست به کاربران این امکان را می دهد که داده های دمایی دقیق تری را از یک دستگاه پوشیدنی یا دستگاه ردیابی دیگر ذخیره و به اشتراک بگذارند.
برنامه های تمرینی برنامه های تمرینی ساختاری برای کمک به کاربر برای دستیابی به اهداف تناسب اندام خود هستند. پشتیبانی برنامه های آموزشی شامل انواع اهداف تکمیل و عملکرد است:
- اهداف تکمیل در مورد کالری سوزانده شده ، مسافت ، مدت زمان ، تکرار ، و مراحل .
- اهداف عملکردی حول هرچه بیشتر تکرارها (AMRAP) ، آهنگ ، ضربان قلب ، قدرت ، میزان تلاش درک شده و سرعت .
درباره آخرین بهروزرسانیهای Health Connect در Android در تجربههای سازگار با Android Health از Google I/O در ساختمان، بیشتر بیاموزید.
اشتراک گذاری جزئی صفحه نمایش
اندروید 15 از اشتراکگذاری جزئی صفحه پشتیبانی میکند تا کاربران بتوانند تنها یک پنجره برنامه را بهجای کل صفحه دستگاه به اشتراک بگذارند یا ضبط کنند. این ویژگی که برای اولین بار در Android 14 QPR2 فعال شد، شامل تماسهای MediaProjection
است که به برنامه شما اجازه میدهد تا تجربه اشتراکگذاری جزئی صفحه را سفارشی کند. توجه داشته باشید که برای برنامههایی که Android 14 (سطح API 34) یا بالاتر را هدف قرار میدهند، رضایت کاربر برای هر جلسه ضبط MediaProjection
لازم است.
تجربه کاربری و رابط کاربری سیستم
اندروید 15 به توسعه دهندگان و کاربران برنامه کنترل و انعطاف بیشتری را برای پیکربندی دستگاه خود مطابق با نیازهایشان می دهد.
برای کسب اطلاعات بیشتر در مورد نحوه استفاده از آخرین پیشرفتها در Android 15 برای بهبود تجربه کاربری برنامه، به بحث بهبود تجربه کاربری برنامه Android خود از Google I/O مراجعه کنید.
پیشنمایشهای غنیتر ویجت با Generated Previews API
قبل از اندروید 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)
)
جریان مورد انتظار عبارت است از:
- در هر زمان، ارائهدهنده ویجت با
setWidgetPreview
تماس میگیرد. پیشنمایشهای ارائهشده درAppWidgetService
با سایر اطلاعات ارائهدهنده وجود دارند. -
setWidgetPreview
از طریقAppWidgetHost.onProvidersChanged
، میزبان ها را از پیش نمایش به روز شده مطلع می کند. در پاسخ، میزبان ویجت تمام اطلاعات ارائه دهنده خود را دوباره بارگیری می کند. - هنگام نمایش یک پیشنمایش ویجت، میزبان
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
允许应用自定义注意力机制
管理(勿扰)规则,并确定何时启用或停用
。Android 15 极大地增强了这些规则,旨在提高
用户体验。其中包含以下增强功能:
- 向
AutomaticZenRule
添加类型,让系统能够应用特殊类型 对某些规则的处理 - 向
AutomaticZenRule
添加图标,使模式更加丰富 易于识别。 - 将
triggerDescription
字符串添加到AutomaticZenRule
,用于描述 规则应当对用户生效的条件。 - 已添加
ZenDeviceEffects
更改为AutomaticZenRule
,从而允许规则触发灰度等操作 显示、夜间模式或调暗壁纸。
VibrationEffect را برای کانال های اعلان تنظیم کنید
Android 15 支持为传入的通知设置丰富的振动,方法是
频道使用的是NotificationChannel.setVibrationEffect
,因此
您的用户可以区分不同类型的通知
不需要看他们的设备
صفحه نمایش بزرگ و عوامل شکل
Android 15 به برنامههای شما پشتیبانی میکند تا از فاکتورهای فرم اندروید، از جمله صفحهنمایشهای بزرگ، قابلیتهای تاشو، و تاشو نهایت استفاده را ببرند.
چندوظیفه ای با صفحه نمایش بزرگ بهبود یافته است
Android 15 为用户提供了在大屏设备上更好地进行多任务处理的方式。对于 例如,用户可以保存自己喜爱的分屏应用组合, 访问并固定屏幕上的任务栏,以便在应用之间快速切换。这意味着 让应用具备自适应能力比以往任何时候都更加重要。
Google I/O 大会上有一些关于构建自适应 Android 的会议 应用和使用 Material 3 构建界面 自适应库 我们的文档中提供了更多帮助信息,帮助您针对大型语言 。
پشتیبانی از صفحه نمایش پوششی
您的应用可以声明一项属性,Android 15 会使用该属性将您的 Application
或 Activity
呈现在支持的可翻转设备的小封面屏幕上。这些屏幕太小,无法被视为 Android 应用的兼容目标,但您的应用可以选择支持这些屏幕,从而让您的应用可在更多位置使用。
قابلیت اتصال
Android 15 پلتفرم را به روز می کند تا برنامه شما به آخرین پیشرفت ها در زمینه ارتباطات و فناوری های بی سیم دسترسی داشته باشد.
پشتیبانی ماهواره ای
Android 15 继续扩展对卫星连接的平台支持,并添加了一些界面元素,以确保在卫星连接环境中提供一致的用户体验。
应用可以使用 ServiceState.isUsingNonTerrestrialNetwork()
检测设备何时连接到卫星,从而更好地了解为什么全网络服务不可用。此外,Android 15 支持短信和彩信应用以及预加载的 RCS 应用,以便使用卫星连接收发信息。
تجربه های روان تر NFC
Android 15 در تلاش است تا تجربه پرداخت یکپارچهتر و قابلاطمینانتر را ایجاد کند و در عین حال به پشتیبانی از اکوسیستم قدرتمند برنامه NFC اندروید ادامه دهد. در دستگاههای پشتیبانیشده، برنامهها میتوانند از NfcAdapter
درخواست کنند تا وارد حالت مشاهده شود، جایی که دستگاه گوش میدهد اما به خوانندههای NFC پاسخ نمیدهد و اشیاء PollingFrame
سرویس NFC برنامه را برای پردازش ارسال میکند. اشیاء PollingFrame
را می توان برای احراز هویت قبل از اولین ارتباط با خواننده NFC استفاده کرد که در بسیاری از موارد امکان تراکنش با یک ضربه را فراهم می کند.
علاوه بر این، برنامهها میتوانند فیلتری را روی دستگاههای پشتیبانیشده ثبت کنند تا بتوانند از فعالیت حلقه نظرسنجی مطلع شوند، که امکان عملکرد روان با چندین برنامه کاربردی NFC آگاه را فراهم میکند.
نقش کیف پول
اندروید 15 نقش کیف پول را معرفی میکند که اجازه میدهد با برنامه کیف پول ترجیحی کاربر یکپارچهتر شود. این نقش جایگزین تنظیم پیشفرض پرداخت بدون تماس NFC میشود. کاربران می توانند با رفتن به تنظیمات > برنامه ها > برنامه های پیش فرض، دارنده نقش Wallet را مدیریت کنند.
نقش Wallet هنگام مسیریابی شیرهای NFC برای ایدزهای ثبت شده در دسته پرداخت استفاده می شود. ضربه ها همیشه به دارنده نقش Wallet می روند مگر اینکه برنامه دیگری که برای همان AID ثبت شده باشد در پیش زمینه اجرا شود.
این نقش همچنین برای تعیین محل قرار گرفتن کاشی دسترسی سریع کیف پول هنگام فعال شدن استفاده می شود. وقتی نقش روی «هیچکدام» تنظیم شود، کاشی دسترسی سریع در دسترس نیست و ضربههای NFC دسته پرداخت فقط به برنامه پیشزمینه تحویل داده میشود.
امنیت
Android 15 به شما کمک می کند امنیت برنامه خود را افزایش دهید، از داده های برنامه خود محافظت کنید، و به کاربران شفافیت و کنترل بیشتری بر روی داده های خود می دهد. برای اطلاعات بیشتر در مورد کارهایی که برای بهبود ایمنی کاربر و محافظت از برنامه شما در برابر تهدیدات جدید انجام می دهیم، گفتگوی حفاظت از امنیت کاربر در Android را از Google I/O ببینید.
مدیریت اعتبار را با تکمیل خودکار ادغام کنید
Starting with Android 15, developers can link specific views like username or password fields with Credential Manager requests, making it easier to provide a tailored user experience during the sign-in process. When the user focuses on one of these views, a corresponding request is sent to Credential Manager. The resulting credentials are aggregated across providers and displayed in autofill fallback UIs, such as inline suggestions or drop-down suggestions. The Jetpack androidx.credentials library is the preferred endpoint for developers to use and will soon be available to further enhance this feature in Android 15 and higher.
ثبتنام و ورود با یک ضربه را با اعلانهای بیومتریک ادغام کنید
Credential Manager integrates biometric prompts into the credential creation and sign-in processes, eliminating the need for providers to manage biometric prompts. As a result, credential providers only need to focus on the results of the create and get flows, augmented with the biometric flow result. This simplified process creates a more efficient and streamlined credential creation and retrieval process.
مدیریت کلید برای رمزگذاری سرتاسر
我们在 Android 15 中引入了 E2eeContactKeysManager
,它提供用于存储加密公钥的操作系统级 API,有助于 Android 应用中的端到端加密 (E2EE)。
E2eeContactKeysManager
旨在与平台通讯录应用集成,使用户能够集中管理和验证其联系人的公钥。
مجوزهای URI محتوا را بررسی می کند
اندروید 15 مجموعهای از APIها را معرفی میکند که بررسیهای مجوز را روی URI محتوا انجام میدهند:
-
Context.checkContentUriPermissionFull
: این یک بررسی کامل مجوز در URIهای محتوا را انجام می دهد. - ویژگی مانیفست
Activity
requireContentUriPermissionFromCaller
: این مجوزهای مشخص شده را در URIهای محتوای ارائه شده در هنگام راه اندازی فعالیت اعمال می کند. - کلاس
ComponentCaller
برای تماس گیرندگانActivity
: این نشان دهنده برنامه ای است که فعالیت را راه اندازی کرده است.
دسترسی
اندروید 15 ویژگی هایی را اضافه می کند که دسترسی کاربران را بهبود می بخشد.
خط بریل بهتر
在 Android 15 中,TalkBack 可以支持通过 USB 和安全蓝牙使用 HID 标准的盲文显示屏。
此标准与鼠标和键盘使用的标准非常相似,有助于 Android 随着时间的推移而支持更广泛的盲文显示屏。
بین المللی شدن
اندروید 15 ویژگیها و قابلیتهایی را اضافه میکند که تجربه کاربر را در هنگام استفاده از دستگاه به زبانهای مختلف تکمیل میکند.
فونت متغیر CJK
با شروع Android 15، فایل فونت برای زبان های چینی، ژاپنی و کره ای (CJK)، NotoSansCJK، اکنون یک فونت متغیر است. فونت های متغیر فرصت هایی را برای تایپوگرافی خلاقانه در زبان های CJK باز می کنند. طراحان میتوانند طیف وسیعتری از سبکها را بررسی کنند و طرحبندیهای بصری چشمگیری ایجاد کنند که قبلاً دستیابی به آنها دشوار یا غیرممکن بود.
توجیه بین شخصیتی
با شروع Android 15، متن را می توان با استفاده از فاصله حروف با استفاده از JUSTIFICATION_MODE_INTER_CHARACTER
توجیه کرد. توجیه بین کلمه ای برای اولین بار در اندروید 8.0 (سطح API 26) معرفی شد و توجیه بین نویسه ها قابلیت های مشابهی را برای زبان هایی که از کاراکتر فضای خالی برای تقسیم بندی استفاده می کنند، مانند چینی، ژاپنی و غیره ارائه می دهد.
پیکربندی خودکار شکست خط
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_NONE
، همانطور که در تصویر زیر نشان داده شده است:
فونت ژاپنی Hentaigana اضافی
در اندروید 15، یک فایل فونت برای هیراگانای ژاپنی قدیمی (معروف به Hentaigana) به طور پیش فرض همراه است. اشکال منحصربهفرد شخصیتهای هنتایگانا میتواند استعدادی متمایز به آثار هنری یا طراحی اضافه کند و در عین حال به حفظ انتقال دقیق و درک اسناد باستانی ژاپنی کمک کند.
VideoLAN 锥形版权所有 (c) 1996-2010 VideoLAN。任何人都可以使用或修改此徽标或修改版本来指代 VideoLAN 项目或 VideoLAN 团队开发的任何产品,但不表示该项目的认可。
Vulkan 和 Vulkan 徽标是 Khronos Group Inc.的注册商标。
OpenGL 是注册商标,OpenGL ES 徽标是 Khronos 许可使用的 Hewlett Packard Enterprise 商标。