Tổng quan về các tính năng và API

Android 15 mang đến cho nhà phát triển các tính năng và API mới tuyệt vời. Các phần sau đây tóm tắt các tính năng này để giúp bạn bắt đầu sử dụng các API liên quan.

Để biết danh sách chi tiết về các API mới, đã được sửa đổi, cũng như đã bị xoá, hãy đọc báo cáo điểm khác biệt về API. Để biết thông tin chi tiết về các API mới, hãy truy cập tài liệu tham khảo về API cho Android (các API mới được trình bày nổi bật). Ngoài ra, để tìm hiểu về những khía cạnh mà thay đổi của nền tảng có thể ảnh hưởng đến ứng dụng của bạn, hãy nhớ tham khảo các thay đổi về hành vi trên Android 15 ảnh hưởng đến ứng dụng khi ứng dụng nhắm đến Android 15các thay đổi về hành vi ảnh hưởng đến tất cả ứng dụng bất kể targetSdkVersion.

Máy ảnh và nội dung nghe nhìn

Android 15 có nhiều tính năng giúp cải thiện trải nghiệm máy ảnh và nội dung đa phương tiện, đồng thời cho phép bạn sử dụng các công cụ và phần cứng để hỗ trợ nhà sáng tạo hiện thực hoá tầm nhìn của mình trên Android.

Để biết thêm thông tin về các tính năng cũng như giải pháp mới nhất dành cho nhà phát triển cho nội dung nghe nhìn và máy ảnh Android, hãy xem bài nói chuyện Xây dựng trải nghiệm máy ảnh và nội dung nghe nhìn Android hiện đại của Google I/O.

Tăng cường ánh sáng yếu

Android 15 ra mắt Low Light Boost (Tăng cường ánh sáng yếu), một chế độ phơi sáng tự động mới dành cho cả Camera 2tiện ích máy ảnh ở chế độ ban đêm. Tính năng Tăng cường ánh sáng yếu điều chỉnh độ phơi sáng của luồng Xem trước trong điều kiện ánh sáng yếu. Điều này khác với cách tiện ích máy ảnh chế độ ban đêm tạo ra các hình ảnh tĩnh, vì chế độ ban đêm kết hợp một loạt ảnh để tạo ra một hình ảnh nâng cao duy nhất. Mặc dù chế độ ban đêm hoạt động rất hiệu quả khi tạo hình ảnh tĩnh, nhưng không thể tạo luồng khung hình liên tục, nhưng tính năng Tăng cường ánh sáng yếu có thể làm được. Do đó, tính năng Tăng cường ánh sáng yếu mang đến các tính năng mới của máy ảnh, chẳng hạn như:

  • Cung cấp bản xem trước hình ảnh nâng cao để người dùng có thể lấy khung hình cho hình ảnh thiếu sáng tốt hơn
  • Quét mã QR trong điều kiện ánh sáng yếu

Nếu bạn bật tính năng Tăng cường ánh sáng yếu, thì tính năng này sẽ tự động bật khi trong môi trường ánh sáng yếu và tắt khi có nhiều ánh sáng hơn.

Ứng dụng có thể ghi tắt luồng Xem trước trong điều kiện ánh sáng yếu để lưu video được tăng độ sáng.

Để biết thêm thông tin, hãy xem bài viết Tăng cường ánh sáng yếu.

Điều khiển máy ảnh trong ứng dụng

Android 15 thêm một tiện ích mới để tăng cường kiểm soát phần cứng máy ảnh cũng như các thuật toán của phần cứng đó trên các thiết bị được hỗ trợ:

  • Điều chỉnh độ mạnh đèn flash nâng cao cho phép điều khiển chính xác cường độ đèn flash ở cả hai chế độ SINGLETORCH trong khi chụp ảnh.

Điều khiển khoảng trần HDR

Android 15 chọn khoảng trần HDR phù hợp với các tính năng cơ bản của thiết bị và độ sâu bit của bảng điều khiển. Đối với các trang có nhiều nội dung SDR, chẳng hạn như ứng dụng nhắn tin hiển thị một hình thu nhỏ HDR, hành vi này có thể ảnh hưởng xấu đến độ sáng cảm nhận được của nội dung SDR. Android 15 cho phép bạn điều khiển khoảng trần HDR bằng setDesiredHdrHeadroom để cân bằng giữa nội dung SDR và HDR.

Độ sáng của các thành phần trên giao diện người dùng SDR trên màn hình bên trái có vẻ đồng nhất so với độ sáng trên màn hình bên phải. Điều này mô phỏng các vấn đề về khoảng trần có thể xảy ra khi nội dung HDR và SDR kết hợp với nhau. Bằng cách điều chỉnh khoảng trần HDR, bạn có thể cân bằng tốt hơn giữa nội dung SDR và HDR.

Kiểm soát âm lượng

Android 15 hỗ trợ cho Tiêu chuẩn độ lớn CTA-2075 để trợ giúp bạn tránh sự không thống nhất về độ ồn của âm thanh và đảm bảo người dùng không phải liên tục điều chỉnh âm lượng khi chuyển đổi giữa các nội dung. Hệ thống tận dụng các đặc điểm đã biết của thiết bị đầu ra (tai nghe và loa) cùng với siêu dữ liệu về độ to trong nội dung âm thanh AAC để điều chỉnh độ to của âm thanh và mức độ nén phạm vi động một cách thông minh.

Để bật tính năng này, bạn cần đảm bảo siêu dữ liệu về độ to trong nội dung AAC và bật tính năng nền tảng trong ứng dụng. Để thực hiện việc này, bạn tạo bản sao của đối tượng LoudnessCodecController bằng cách gọi phương thức nhà máy create của đối tượng đó với mã phiên âm thanh từ AudioTrack được liên kết; thao tác này sẽ tự động bắt đầu áp dụng các bản cập nhật âm thanh. Bạn có thể truyền một OnLoudnessCodecUpdateListener để sửa đổi hoặc lọc các thông số âm lượng trước khi áp dụng các thông số đó trên 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 cũng sẽ được cập nhật để sử dụng Các API LoudnessCodecController để tích hợp liền mạch ứng dụng.

Thiết bị MIDI 2.0 ảo

Android 13 hỗ trợ thêm tính năng kết nối với Thiết bị MIDI 2.0 sử dụng USB, giao tiếp bằng Gói MIDI chung (UMP). Android 15 mở rộng tính năng hỗ trợ UMP cho các ứng dụng MIDI ảo, cho phép các ứng dụng sáng tác điều khiển các ứng dụng tổng hợp dưới dạng thiết bị MIDI 2.0 ảo giống như khi sử dụng thiết bị USB MIDI 2.0.

Giải mã phần mềm AV1 hiệu quả hơn

biểu trưng dav1d

dav1d, bộ giải mã phần mềm AV1 phổ biến từ VideoLAN hiện có sẵn cho các thiết bị Android không hỗ trợ giải mã AV1 trong phần cứng. Dav1d có hiệu suất cao hơn gấp 3 lần so với bộ giải mã phần mềm AV1 cũ, cho phép phát HD AV1 cho nhiều người dùng hơn, bao gồm cả một số thiết bị cấp thấp và trung bình.

Hiện tại, ứng dụng của bạn cần chọn sử dụng dav1d bằng cách gọi ứng dụng này theo tên "c2.android.av1-dav1d.decoder". dav1d sẽ được đặt làm bộ giải mã phần mềm AV1 mặc định trong lần cập nhật tiếp theo. Dịch vụ hỗ trợ này được chuẩn hoá và điều chỉnh cho phiên bản cũ đối với các thiết bị Android 11 nhận được bản cập nhật hệ thống Google Play.

Năng suất và công cụ dành cho nhà phát triển

Mặc dù hầu hết nỗ lực của chúng tôi là cải thiện các trung tâm năng suất cho bạn xoay quanh các công cụ như Android Studio, Jetpack Compose và thư viện Android Jetpack, nhưng chúng tôi luôn tìm cách trong nền tảng này để giúp bạn dễ dàng hiện thực hoá tầm nhìn của mình.

Nội dung cập nhật OpenJDK 17

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

The following key features and improvements are included:

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

Cải tiến về PDF

Android 15 includes substantial improvements to the PdfRenderer APIs. Apps can incorporate advanced features such as rendering password-protected files, annotations, form editing, searching, and selection with copy. Linearized PDF optimizations are supported to speed local PDF viewing and reduce resource use. The Jetpack PDF library uses these APIs to simplify adding PDF viewing capabilities to your app.

The latest updates to PDF rendering include features such as searching an embedded PDF file.

The PdfRenderer has been moved to a module that can be updated using Google Play system updates independent of the platform release, and we're supporting these changes back to Android 11 (API level 30) by creating a compatible pre-Android 15 version of the API surface, called PdfRendererPreV.

Tinh chỉnh chuyển đổi ngôn ngữ tự động

Android 14 đã bổ sung tính năng nhận dạng đa ngôn ngữ trên thiết bị, có tính năng tự động chuyển đổi giữa các ngôn ngữ. Tuy nhiên, điều này có thể khiến từ bị loại bỏ, đặc biệt là khi các ngôn ngữ chuyển đổi ít bị tạm dừng giữa hai cách nói. Android 15 bổ sung các chế độ kiểm soát bổ sung để giúp các ứng dụng điều chỉnh quá trình chuyển đổi này cho phù hợp với trường hợp sử dụng của chúng. EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS giới hạn chế độ tự động chuyển sang đầu phiên âm thanh, trong khi EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES tắt tính năng chuyển đổi ngôn ngữ sau một số lượng nút chuyển đã xác định. Các tuỳ chọn này đặc biệt hữu ích nếu bạn dự kiến sẽ có một ngôn ngữ duy nhất được nói trong phiên cần được phát hiện tự động.

Cải thiện API phông chữ biến OpenType

Android 15 cải thiện khả năng hữu dụng của phông chữ biến OpenType. Bạn có thể làm điều này ngay bây giờ tạo một thực thể FontFamily từ phông chữ biến mà không cần chỉ định trục trọng số bằng API buildVariableFamily. Trình kết xuất văn bản ghi đè giá trị của trục wght để khớp với văn bản đang hiển thị.

Việc sử dụng API mới sẽ giúp đơn giản hoá mã để tạo Typeface đáng kể:

Kotlin

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

Java

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

Trước đây, để tạo cùng một Typeface, bạn sẽ cần nhiều mã hơn:

Kotlin

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()

Java

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();

Dưới đây là ví dụ về cách một Typeface được tạo bằng cả API cũ và mới hiển thị:

Một ví dụ về sự khác biệt giữa quá trình kết xuất Phông chữ khi sử dụng kiểu kết xuất mới và cũ
API

Trong ví dụ này, Typeface được tạo bằng API cũ không có cho phép tạo độ đậm phông chữ chính xác cho cỡ chữ 350, 450, 550 và 650. Font để trình kết xuất sẽ quay lại trọng số gần nhất. Do đó, trong trong trường hợp này, 300 sẽ được kết xuất thay vì 350, 400 được kết xuất thay vì 450 và v.v. Ngược lại, Typeface được tạo bằng các API mới sẽ tự động tạo thực thể Font cho một trọng số nhất định, do đó trọng số chính xác được hiển thị là 350, 450, 550 và 650.

Kiểm soát ngắt dòng chi tiết

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

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

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

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

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

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

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

Lưu trữ ứng dụng

Android và Google Play đã công bố hỗ trợ tính năng lưu trữ ứng dụng vào năm ngoái, cho phép người dùng giải phóng dung lượng bằng cách xoá một phần các ứng dụng ít dùng trên thiết bị được phát hành bằng Android App Bundle trên Google Play. Android 15 hỗ trợ cấp hệ điều hành để lưu trữ và huỷ lưu trữ ứng dụng, giúp tất cả các cửa hàng ứng dụng dễ dàng triển khai tính năng này.

Các ứng dụng có quyền REQUEST_DELETE_PACKAGES có thể gọi PackageInstaller requestArchive để yêu cầu lưu trữ một đã cài đặt gói ứng dụng. Thao tác này sẽ xoá APK và mọi tệp đã lưu vào bộ nhớ đệm nhưng vẫn tồn tại dữ liệu người dùng. Các ứng dụng đã lưu trữ được trả về dưới dạng ứng dụng có thể hiển thị thông qua các API LauncherApps; người dùng sẽ thấy một cách xử lý giao diện người dùng để làm nổi bật rằng các ứng dụng đó đã được lưu trữ. Nếu người dùng nhấn vào một ứng dụng đã lưu trữ, trình cài đặt chịu trách nhiệm sẽ nhận được yêu cầu huỷ lưu trữ ứng dụng đó và quá trình khôi phục có thể được theo dõi bằng thông báo truyền tin ACTION_PACKAGE_ADDED.

Đồ hoạ

Android 15 mang đến những điểm cải tiến mới nhất về đồ hoạ, bao gồm cả ANGLE và các thành phần bổ sung cho hệ thống đồ hoạ Canvas.

Hiện đại hoá quyền truy cập vào GPU của Android

Biểu trưng Vulkan

Phần cứng Android đã phát triển khá nhiều từ những ngày đầu, khi hệ điều hành cốt lõi chạy trên một CPU và GPU được truy cập bằng API dựa trên quy trình chức năng cố định. API đồ hoạ Vulkan® đã có trong NDK kể từ Android 7.0 (API cấp 24) với mô hình trừu tượng cấp thấp hơn giúp phản ánh tốt hơn phần cứng GPU hiện đại, mở rộng quy mô hiệu quả hơn để hỗ trợ nhiều lõi CPU và giảm mức hao tổn của trình điều khiển CPU — nhờ đó cải thiện hiệu suất của ứng dụng. Vulkan được mọi công cụ phát triển trò chơi hiện đại hỗ trợ.

Vulkan là giao diện ưu tiên của Android cho GPU. Do đó, Android 15 tích hợp ANGLE làm lớp không bắt buộc để chạy OpenGL® ES trên Vulkan. Việc chuyển sang ANGLE sẽ chuẩn hoá hoạt động triển khai Android OpenGL để cải thiện khả năng tương thích và trong một số trường hợp, sẽ cải thiện hiệu suất. Bạn có thể kiểm thử độ ổn định và hiệu suất của ứng dụng OpenGL ES bằng ANGLE bằng cách bật tuỳ chọn cho nhà phát triển trong phần Cài đặt -> Hệ thống -> Tuỳ chọn cho nhà phát triển -> Thử nghiệm: Bật ANGLE trên Android 15.

Android ANGLE trong lộ trình Vulkan

Lộ trình thay đổi sắp tới đối với API GPU của Android.

Để tinh giản ngăn xếp GPU, từ nay về sau, chúng tôi sẽ cung cấp ANGLE dưới dạng trình điều khiển hệ thống GL trên các thiết bị mới khác, với dự kiến trong tương lai rằng OpenGL/ES sẽ chỉ được cung cấp thông qua ANGLE. Tuy nhiên, chúng tôi dự định tiếp tục hỗ trợ OpenGL ES trên tất cả thiết bị.

Các bước nên làm tiếp theo

Sử dụng các tuỳ chọn cho nhà phát triển để chọn trình điều khiển ANGLE cho OpenGL ES và kiểm thử ứng dụng của bạn. Đối với các dự án mới, bạn nên sử dụng Vulkan cho C/C++.

Những điểm cải tiến cho Canvas

Android 15 continues our modernization of Android's Canvas graphics system with additional capabilities:

  • Matrix44 provides a 4x4 matrix for transforming coordinates that should be used when you want to manipulate the canvas in 3D.
  • clipShader intersects the current clip with the specified shader, while clipOutShader sets the clip to the difference of the current clip and the shader, each treating the shader as an alpha mask. This supports the drawing of complex shapes efficiently.

Hiệu suất và pin

Android tiếp tục tập trung vào việc giúp bạn cải thiện hiệu suất và chất lượng của các ứng dụng. Android 15 giới thiệu các API mới giúp thực thi, tối ưu hoá hiệu suất ứng dụng và thu thập thông tin chi tiết về ứng dụng một cách hiệu quả hơn.

Để biết các phương pháp hay nhất về tiết kiệm pin, gỡ lỗi mức sử dụng mạng và nguồn điện, cũng như thông tin chi tiết về cách chúng tôi cải thiện hiệu suất pin của công việc ở chế độ nền trong Android 15 và các phiên bản Android gần đây, hãy xem bài viết Cải thiện hiệu suất pin của công việc ở chế độ nền trên Android tại Google I/O.

API ApplicationStartInfo

In previous versions of Android, app startup has been a bit of a mystery. It was challenging to determine within your app whether it started from a cold, warm, or hot state. It was also difficult to know how long your app spent during the various launch phases: forking the process, calling onCreate, drawing the first frame, and more. When your Application class was instantiated, you had no way of knowing whether the app started from a broadcast, a content provider, a job, a backup, boot complete, an alarm, or an Activity.

The ApplicationStartInfo API on Android 15 provides all of this and more. You can even choose to add your own timestamps into the flow to help collect timing data in one place. In addition to collecting metrics, you can use ApplicationStartInfo to help directly optimize app startup; for example, you can eliminate the costly instantiation of UI-related libraries within your Application class when your app is starting up due to a broadcast.

Thông tin chi tiết về kích thước ứng dụng

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

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

Lập hồ sơ do ứng dụng quản lý

Android 15 bao gồm lớp ProfilingManager, cho phép bạn thu thập thông tin phân tích tài nguyên từ trong ứng dụng. Chúng tôi dự định gói thông tin này bằng một API Android Jetpack để đơn giản hoá việc tạo các yêu cầu phân tích tài nguyên, nhưng API cốt lõi sẽ cho phép thu thập tệp báo lỗi, hồ sơ vùng nhớ khối xếp, lấy mẫu ngăn xếp và nhiều tính năng khác. Phương thức này cung cấp lệnh gọi lại cho ứng dụng của bạn bằng một thẻ được cung cấp để xác định tệp đầu ra, được phân phối đến thư mục tệp của ứng dụng. API này giới hạn số lượng yêu cầu để giảm thiểu tác động đến hiệu suất.

Cải thiện cơ sở dữ liệu SQLite

Android 15 giới thiệu các API SQLite mới để hiển thị các tính năng nâng cao từ công cụ SQLite cơ bản nhắm đến các vấn đề cụ thể về hiệu suất có thể xuất hiện trong ứng dụng.

Nhà phát triển nên tham khảo các phương pháp hay nhất về hiệu suất SQLite để khai thác tối đa cơ sở dữ liệu SQLite, đặc biệt là khi làm việc với các cơ sở dữ liệu lớn hoặc khi chạy các truy vấn có độ trễ.

  • Giao dịch trì hoãn ở chế độ chỉ đọc: khi phát hành các giao dịch ở chế độ chỉ có thể đọc (không bao gồm câu lệnh ghi), hãy sử dụng beginTransactionReadOnly()beginTransactionWithListenerReadOnly(SQLiteTransactionListener) để phát hành các giao dịch DEFERRED chỉ đọc. Các giao dịch như vậy có thể chạy đồng thời với nhau và nếu cơ sở dữ liệu ở chế độ WAL, chúng có thể chạy đồng thời với các giao dịch IMMEDIATE hoặc EXCLUSIVE.
  • Số lượng hàng và mã nhận dạng: Các API mới được thêm vào để truy xuất số lượng hàng đã thay đổi hoặc mã nhận dạng hàng được chèn gần đây nhất mà không cần đưa ra thêm truy vấn. getLastChangedRowCount() trả về số lượng hàng đã được câu lệnh SQL gần đây nhất chèn, cập nhật hoặc xoá trong giao dịch hiện tại, trong khi getTotalChangedRowCount() trả về số lượng trên kết nối hiện tại. getLastInsertRowId() trả về rowid của hàng cuối cùng được chèn vào kết nối hiện tại.
  • Câu lệnh thô: phát hành một câu lệnh SQlite thô, bỏ qua các trình bao bọc tiện lợi và mọi chi phí xử lý bổ sung mà các câu lệnh này có thể phải chịu.

Bản cập nhật Android Dynamic Performance Framework

Android 15 continues our investment in the Android Dynamic Performance Framework (ADPF), a set of APIs that allow games and performance intensive apps to interact more directly with power and thermal systems of Android devices. On supported devices, Android 15 adds ADPF capabilities:

  • A power-efficiency mode for hint sessions to indicate that their associated threads should prefer power saving over performance, great for long-running background workloads.
  • GPU and CPU work durations can both be reported in hint sessions, allowing the system to adjust CPU and GPU frequencies together to best meet workload demands.
  • Thermal headroom thresholds to interpret possible thermal throttling status based on headroom prediction.

To learn more about how to use ADPF in your apps and games, head over to the documentation.

Quyền riêng tư

Android 15 cung cấp nhiều tính năng giúp nhà phát triển ứng dụng bảo vệ quyền riêng tư của người dùng.

Phát hiện video ghi màn hình

Android 15 adds support for apps to detect that they are being recorded. A callback is invoked whenever the app transitions between being visible or invisible within a screen recording. An app is considered visible if activities owned by the registering process's UID are being recorded. This way, if your app is performing a sensitive operation, you can inform the user that they're being recorded.

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)
}

Mở rộng các chức năng của IntentFilter

Android 15 tích hợp tính năng hỗ trợ độ phân giải Intent chính xác hơn thông qua UriRelativeFilterGroup. Tính năng này chứa một tập hợp các đối tượng UriRelativeFilter tạo thành một tập hợp các quy tắc so khớp Intent mà mỗi quy tắc phải được đáp ứng, bao gồm các tham số truy vấn URL, mảnh URL và các quy tắc chặn hoặc loại trừ.

Bạn có thể xác định các quy tắc này trong tệp XML AndroidManifest bằng thẻ <uri-relative-filter-group>. Thẻ này có thể bao gồm thẻ android:allow (không bắt buộc). Các thẻ này có thể chứa <data> thẻ sử dụng dữ liệu hiện có các thuộc tính thẻ cũng như android:queryandroid:fragment .

Dưới đây là ví dụ về cú pháp 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>

Không gian riêng tư

Bạn có thể mở khoá và khoá không gian riêng tư để hiện hoặc ẩn không gian này nhạy cảm trên một thiết bị.

Không gian riêng tư giúp người dùng tạo không gian riêng trên thiết bị của họ để họ có thể giữ các ứng dụng nhạy cảm tránh xa những cặp mắt tò mò, dưới một lớp bổ sung xác thực. Không gian riêng tư sử dụng một hồ sơ người dùng riêng biệt. Người dùng có thể hãy chọn sử dụng phương thức khoá thiết bị hoặc một hệ số khoá riêng cho không gian riêng tư.

Các ứng dụng trong không gian riêng tư sẽ xuất hiện trong một vùng chứa riêng trong trình chạy, và bị ẩn khỏi chế độ xem, thông báo, chế độ cài đặt gần đây và khỏi các ứng dụng khác khi không gian riêng tư bị khoá. Nội dung do người dùng tạo và nội dung tải xuống (chẳng hạn như tệp) và tài khoản được phân tách giữa không gian riêng tư và không gian chính. Trang chia sẻ nội dung của hệ thống và Bạn có thể dùng công cụ chọn ảnh để cấp cho các ứng dụng quyền truy cập vào nội dung trên các không gian khi không gian riêng tư mở khoá.

Người dùng không thể di chuyển các ứng dụng hiện có và dữ liệu của họ vào không gian riêng tư. Thay vào đó, người dùng chọn tuỳ chọn cài đặt trong không gian riêng tư để cài đặt ứng dụng bằng bất kỳ cửa hàng ứng dụng nào họ thích. Các ứng dụng trong không gian riêng tư được cài đặt dưới dạng tách riêng các bản sao khỏi mọi ứng dụng trong không gian chính (các bản sao mới của cùng một ứng dụng).

Khi người dùng khoá không gian riêng tư, hồ sơ sẽ dừng lại. Trong khi hồ sơ bị dừng, ứng dụng trong không gian riêng tư không còn hoạt động và không thể hoạt động các hoạt động ở nền trước hoặc nền sau, bao gồm cả việc hiển thị thông báo.

Bạn nên kiểm thử không gian riêng tư trong ứng dụng để đảm bảo ứng dụng hoạt động như mong đợi, đặc biệt nếu ứng dụng của bạn rơi vào một trong những trường hợp sau danh mục:

Truy vấn lựa chọn gần đây nhất của người dùng về Quyền truy cập vào ảnh đã chọn

Giờ đây, các ứng dụng chỉ có thể làm nổi bật những bức ảnh được chọn gần đây nhất và video khi được cấp quyền truy cập một phần vào nội dung nghe nhìn. Chiến dịch này có thể cải thiện trải nghiệm người dùng cho những ứng dụng thường xuyên yêu cầu quyền truy cập vào ảnh và video. Để sử dụng tính năng này trong ứng dụng của bạn, hãy bật Đối số QUERY_ARG_LATEST_SELECTION_ONLY khi truy vấn MediaStore đến ContentResolver.

Kotlin

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()
   )
)

Java

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)
});

Hộp cát về quyền riêng tư trên Android

Android 15 bao gồm các tiện ích Dịch vụ quảng cáo Android mới nhất, kết hợp với phiên bản mới nhất của Hộp cát về quyền riêng tư trên Android. Việc bổ sung này là một phần trong nỗ lực của chúng tôi nhằm phát triển các công nghệ mới giúp cải thiện quyền riêng tư của người dùng và mang lại trải nghiệm quảng cáo được cá nhân hoá hiệu quả cho các ứng dụng di động. Trang hộp cát về quyền riêng tư của chúng tôi có thêm thông tin về Bản dùng thử cho nhà phát triển và các chương trình beta của Hộp cát về quyền riêng tư trên Android để giúp bạn bắt đầu.

Health Connect

Android 15 tích hợp các tiện ích mới nhất Health Connect của Android, một ứng dụng bảo mật và tập trung để quản lý và chia sẻ dữ liệu sức khoẻ và thể chất do ứng dụng thu thập. Thông tin cập nhật này thêm tính năng hỗ trợ cho các loại dữ liệu khác về tính năng thể dục, dinh dưỡng, nhiệt độ trên da, kế hoạch tập luyện, v.v.

Tính năng theo dõi nhiệt độ trên da giúp người dùng lưu trữ và chia sẻ thông tin chính xác hơn dữ liệu về nhiệt độ từ thiết bị đeo hoặc thiết bị theo dõi khác.

Kế hoạch tập luyện là kế hoạch tập thể dục có cấu trúc để giúp người dùng đạt được mục tiêu về thể chất. Hỗ trợ kế hoạch tập luyện bao gồm nhiều mục tiêu về hiệu suất và hoàn thành:

Tìm hiểu thêm về các bản cập nhật mới nhất cho Health Connect trong Android trong bài nói chuyện Tạo trải nghiệm thích ứng bằng Android Health tại Google I/O.

Chia sẻ một phần màn hình

Android 15 hỗ trợ tính năng chia sẻ một phần màn hình để người dùng có thể chia sẻ hoặc chỉ ghi lại cửa sổ ứng dụng thay vì toàn bộ màn hình thiết bị. Tính năng này (được bật lần đầu trong Android 14 QPR2) bao gồm các lệnh gọi lại MediaProjection cho phép ứng dụng của bạn tuỳ chỉnh trải nghiệm chia sẻ một phần màn hình. Xin lưu ý rằng đối với các ứng dụng nhắm đến Android 14 (API cấp 34) trở lên, bạn phải có sự đồng ý của người dùng đối với mỗi phiên chụp MediaProjection.

Trải nghiệm người dùng và giao diện người dùng hệ thống

Android 15 trao cho nhà phát triển ứng dụng và người dùng nhiều quyền kiểm soát cũng như sự linh hoạt hơn để định cấu hình thiết bị cho phù hợp với nhu cầu của họ.

Để tìm hiểu thêm về cách sử dụng các điểm cải tiến mới nhất trong Android 15 nhằm cải thiện trải nghiệm người dùng trên ứng dụng, hãy xem bài viết Cải thiện trải nghiệm người dùng của ứng dụng Android tại Google I/O.

Xem trước tiện ích phong phú hơn với Generated Previews API

Trước Android 15, cách duy nhất để cung cấp bản xem trước bộ chọn tiện ích là chỉ định tài nguyên hình ảnh hoặc bố cục tĩnh. Các bản xem trước này thường khác nhau đáng kể so với giao diện của tiện ích thực tế khi tiện ích được đặt trên trang chủ màn hình. Ngoài ra, không thể tạo tài nguyên tĩnh bằng Jetpack Glance, vì vậy tính năng Glance nhà phát triển phải chụp ảnh màn hình tiện ích của họ hoặc tạo bố cục XML để có một bản xem trước tiện ích.

Android 15 bổ sung tính năng hỗ trợ cho bản xem trước đã tạo. Điều này có nghĩa là tiện ích ứng dụng thay vào đó, nhà cung cấp có thể tạo RemoteViews để dùng làm bản xem trước của bộ chọn của một tài nguyên tĩnh.

Các ứng dụng có thể cung cấp Chế độ xem từ xa cho Bộ chọn tiện ích để có thể cập nhật nội dung trong bộ chọn để thể hiện chính xác hơn nội dung mà người dùng sẽ thấy.

API Đẩy

Các ứng dụng có thể cung cấp bản xem trước được tạo thông qua API đẩy. Các ứng dụng có thể cung cấp bản xem trước tại bất kỳ thời điểm nào trong vòng đời và không nhận được yêu cầu rõ ràng từ máy chủ để cung cấp bản xem trước. Bản xem trước vẫn tồn tại trong AppWidgetService, và người tổ chức có thể yêu cầu các quảng cáo đó theo yêu cầu. Ví dụ sau đây tải một tiện ích XML tài nguyên bố cục và đặt tài nguyên đó làm bản xem trước:

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

Luồng dự kiến là:

  1. Nhà cung cấp tiện ích sẽ gọi setWidgetPreview bất cứ lúc nào. Các bản xem trước vẫn tồn tại trong AppWidgetService kèm theo thông tin khác về nhà cung cấp.
  2. setWidgetPreview thông báo cho máy chủ về bản xem trước đã cập nhật thông qua Lệnh gọi lại AppWidgetHost.onProvidersChanged. Để đáp lại, tiện ích này máy chủ lưu trữ tải lại tất cả thông tin về nhà cung cấp của nó.
  3. Khi hiển thị bản xem trước của tiện ích, máy chủ lưu trữ sẽ kiểm tra AppWidgetProviderInfo.generatedPreviewCategories và nếu được chọn có sẵn danh mục, hãy gọi AppWidgetManager.getWidgetPreview tới trả về bản xem trước đã lưu cho ứng dụng nhà cung cấp này.

Thời điểm gọi setWidgetPreview

Do không có lệnh gọi lại để cung cấp bản xem trước, ứng dụng có thể chọn gửi bản xem trước bất kỳ lúc nào khi chúng đang chạy. Tần suất cập nhật bản xem trước phụ thuộc vào trường hợp sử dụng tiện ích.

Danh sách sau đây mô tả hai danh mục chính của trường hợp sử dụng bản xem trước:

  • Những nhà cung cấp cho thấy dữ liệu thực trong bản xem trước tiện ích, chẳng hạn như dữ liệu được cá nhân hoá hoặc thông tin gần đây. Các nhà cung cấp này có thể đặt bản xem trước sau khi người dùng đã đăng nhập hoặc đã thực hiện định cấu hình ban đầu trong ứng dụng của họ. Sau đó, họ có thể thiết lập một nhiệm vụ định kỳ để cập nhật bản xem trước theo tần suất họ chọn. Ví dụ về loại tiện ích này có thể là ảnh, lịch, thời tiết hoặc tin tức tiện ích.
  • Các trình cung cấp hiển thị thông tin tĩnh trong bản xem trước hoặc tiện ích thao tác nhanh mà không hiển thị bất kỳ dữ liệu nào. Các nhà cung cấp này có thể đặt bản xem trước một lần, khi khởi chạy ứng dụng lần đầu tiên. Ví dụ về loại tiện ích này bao gồm trình đơn nhanh tiện ích hành động hoặc tiện ích lối tắt Chrome.

Một số nhà cung cấp có thể hiển thị bản xem trước tĩnh trên bộ chọn chế độ thiết bị trung tâm, nhưng thực tế thông tin trên bộ chọn màn hình chính. Các nhà cung cấp này nên tuân thủ hướng dẫn cho cả hai trường hợp sử dụng này để đặt bản xem trước.

Hình trong hình

Android 15 introduces changes in Picture-in-Picture (PiP) ensuring an even smoother transition when entering into PiP mode. This will be beneficial for apps having UI elements overlaid on top of their main UI, which goes into PiP.

Developers use the onPictureInPictureModeChanged callback to define logic that toggles the visibility of the overlaid UI elements. This callback is triggered when the PiP enter or exit animation is completed. Beginning in Android 15, the PictureInPictureUiState class includes another state.

With this UI state, apps targeting Android 15 (API level 35) will observe the Activity#onPictureInPictureUiStateChanged callback being invoked with isTransitioningToPip() as soon as the PiP animation starts. There are many UI elements that are not relevant for the app when it is in PiP mode, for example views or layout that include information such as suggestions, upcoming video, ratings, and titles. When the app goes to PiP mode, use the onPictureInPictureUiStateChanged callback to hide these UI elements. When the app goes to full screen mode from the PiP window, use onPictureInPictureModeChanged callback to unhide these elements, as shown in the following examples:

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

This quick visibility toggle of irrelevant UI elements (for a PiP window) helps ensure a smoother and flicker-free PiP enter animation.

Cải thiện quy tắc Không làm phiền

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

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

Đặt RungEffect cho kênh thông báo

Android 15 hỗ trợ chế độ rung mạnh cho các thông báo đến bằng cách kênh của bạn bằng NotificationChannel.setVibrationEffect, vì vậy người dùng có thể phân biệt giữa các loại thông báo khác nhau mà không cần phải xem thiết bị của mình.

Màn hình lớn và kiểu dáng thiết bị

Android 15 hỗ trợ ứng dụng của bạn khai thác tối đa các kiểu dáng thiết bị của Android, bao gồm màn hình lớn, thiết bị có thể lật và thiết bị có thể gập lại.

Cải thiện tính năng đa nhiệm trên màn hình lớn

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

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

Hỗ trợ màn hình ngoài

Ứng dụng của bạn có thể khai báo một thuộc tính mà Android 15 dùng để cho phép Application hoặc Activity của bạn xuất hiện trên màn hình bìa nhỏ của thiết bị có thể gập lại được hỗ trợ. Những màn hình này quá nhỏ để được coi là mục tiêu tương thích để chạy ứng dụng Android. Tuy nhiên, ứng dụng của bạn có thể chọn hỗ trợ những màn hình này, giúp ứng dụng của bạn xuất hiện ở nhiều vị trí hơn.

Khả năng kết nối

Android 15 cập nhật nền tảng để cấp cho ứng dụng của bạn quyền tiếp cận những tiến bộ mới nhất về giao tiếp và công nghệ không dây.

Hỗ trợ vệ tinh

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

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

A notification appears when the device connects to a satellite.

Trải nghiệm NFC mượt mà hơn

Android 15 đang nỗ lực để mang đến trải nghiệm thanh toán không tiếp xúc liền mạch và đáng tin cậy hơn, đồng thời tiếp tục hỗ trợ hệ sinh thái ứng dụng NFC mạnh mẽ của Android. Trên các thiết bị được hỗ trợ, ứng dụng có thể yêu cầu NfcAdapter chuyển sang chế độ quan sát, trong đó thiết bị nghe nhưng không phản hồi với trình đọc NFC, gửi đối tượng dịch vụ PollingFrame của ứng dụng để xử lý. Bạn có thể dùng các đối tượng PollingFrame để xác thực trước lần giao tiếp đầu tiên với trình đọc NFC, cho phép thực hiện giao dịch bằng một lần nhấn trong nhiều trường hợp.

Ngoài ra, giờ đây, các ứng dụng có thể đăng ký bộ lọc trên các thiết bị được hỗ trợ để có thể được thông báo về hoạt động thăm dò vòng lặp, cho phép thao tác suôn sẻ với nhiều ứng dụng nhận biết NFC.

Vai trò trên Wallet

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

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

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

Bảo mật

Android 15 giúp bạn tăng cường tính bảo mật của ứng dụng, bảo vệ dữ liệu của ứng dụng, đồng thời mang lại cho người dùng thông tin minh bạch hơn và nhiều quyền kiểm soát hơn đối với dữ liệu của họ. Xem bài viết Bảo vệ bảo mật người dùng trên Android tại Google I/O để biết thêm về những việc chúng tôi đang thực hiện nhằm cải thiện các biện pháp bảo vệ người dùng và bảo vệ ứng dụng của bạn trước các mối đe doạ mới.

Tích hợp Trình quản lý thông tin xác thực với tính năng tự động điền

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.

Tích hợp tính năng đăng ký và đăng nhập bằng một lần chạm với lời nhắc sinh trắc học

Trình quản lý thông tin xác thực tích hợp lời nhắc sinh trắc học vào quy trình tạo thông tin xác thực và đăng nhập, giúp các nhà cung cấp không cần phải quản lý lời nhắc sinh trắc học. Do đó, trình cung cấp thông tin xác thực chỉ cần tập trung vào kết quả của quy trình tạo và nhận, được tăng cường bằng kết quả của quy trình sinh trắc học. Quy trình đơn giản này giúp tạo và truy xuất thông tin xác thực hiệu quả và đơn giản hơn.

Quản lý khoá cho phương thức mã hoá hai đầu

Chúng tôi sẽ ra mắt E2eeContactKeysManager trong Android 15, hỗ trợ phương thức mã hoá hai đầu (E2EE) trong các ứng dụng Android của bạn bằng cách cung cấp một API cấp hệ điều hành để lưu trữ khoá công khai mã hoá.

E2eeContactKeysManager được thiết kế để tích hợp với ứng dụng danh bạ trên nền tảng, giúp người dùng quản lý và xác minh khoá công khai của danh bạ một cách tập trung.

Kiểm tra quyền đối với URI nội dung

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

Hỗ trợ tiếp cận

Android 15 bổ sung các tính năng giúp cải thiện khả năng hỗ trợ tiếp cận cho người dùng.

Chữ nổi tốt hơn

Trên Android 15, chúng tôi đã tạo điều kiện để TalkBack có thể hỗ trợ màn hình chữ nổi đang sử dụng tiêu chuẩn HID qua cả USB và Bluetooth bảo mật.

Tiêu chuẩn này, cũng giống như tiêu chuẩn mà chuột và bàn phím sử dụng, sẽ giúp Android hỗ trợ nhiều loại màn hình chữ nổi hơn theo thời gian.

Quốc tế hoá

Android 15 bổ sung các tính năng và chức năng nhằm bổ sung trải nghiệm người dùng khi sử dụng thiết bị bằng nhiều ngôn ngữ.

Phông chữ biến CJK

Kể từ Android 15, tệp phông chữ cho tiếng Trung, tiếng Nhật và tiếng Hàn (CJK) (NotoSansCJK) nay là một phông chữ có thể thay đổi. Phông chữ thay đổi mở ra nhiều khả năng mới cho kiểu chữ sáng tạo bằng ngôn ngữ CJK. Nhà thiết kế có thể khám phá nhiều kiểu dáng và tạo ra những bố cục bắt mắt, ấn tượng mà trước đây khó hoặc không thể làm được.

Cách phông chữ có thể thay đổi cho tiếng Trung, tiếng Nhật và tiếng Hàn (CJK) xuất hiện với độ rộng phông chữ khác nhau.

Giải thích giữa các ký tự

Kể từ Android 15, bạn có thể căn chỉnh văn bản bằng cách sử dụng khoảng cách chữ cái bằng cách đang sử dụng JUSTIFICATION_MODE_INTER_CHARACTER. Lý do giữa các từ cũ là được ra mắt lần đầu trong Android 8.0 (API cấp 26) và liên ký tự Dịch vụ này cung cấp các khả năng tương tự cho các ngôn ngữ sử dụng ký tự khoảng trắng để phân đoạn, chẳng hạn như tiếng Trung, tiếng Nhật và các loại khác.

Bố cục cho văn bản tiếng Nhật bằng JUSTIFICATION_MODE_NONE.
Bố cục cho văn bản tiếng Anh bằng cách sử dụng JUSTIFICATION_MODE_NONE.


Bố cục cho văn bản tiếng Nhật bằng cách sử dụng JUSTIFICATION_MODE_INTER_WORD.
Bố cục cho văn bản tiếng Anh bằng cách sử dụng JUSTIFICATION_MODE_INTER_WORD.


Bố cục cho văn bản tiếng Nhật bằng cách sử dụng JUSTIFICATION_MODE_INTER_CHARACTER.
Bố cục cho văn bản tiếng Anh bằng cách sử dụng JUSTIFICATION_MODE_INTER_CHARACTER.

Cấu hình ngắt dòng tự động

Android bắt đầu hỗ trợ ngắt dòng dựa trên cụm từ cho tiếng Nhật và tiếng Hàn bằng Android 13 (API cấp 33). Tuy nhiên, mặc dù ngắt dòng dựa trên cụm từ sẽ cải thiện mức độ dễ đọc của các dòng văn bản ngắn, nhưng chúng sẽ không phù hợp với các dòng văn bản dài. Trên Android 15, ứng dụng chỉ có thể ngắt dòng dựa trên cụm từ cho các dòng ngắn văn bản, sử dụng LINE_BREAK_WORD_STYLE_AUTO . Lựa chọn này chọn kiểu từ phù hợp nhất cho văn bản.

Đối với các dòng văn bản ngắn, dấu ngắt dòng dựa trên cụm từ được sử dụng, hoạt động giống như LINE_BREAK_WORD_STYLE_PHRASE, như minh hoạ trong hình sau:

Đối với các dòng văn bản ngắn, LINE_BREAK_WORD_STYLE_AUTO áp dụng ngắt dòng dựa trên cụm từ để cải thiện khả năng đọc văn bản. Điều này giống như việc áp dụng LINE_BREAK_WORD_STYLE_PHRASE.

Đối với các dòng văn bản dài hơn, LINE_BREAK_WORD_STYLE_AUTO sử dụng ký tự no kiểu chữ ngắt dòng, hoạt động giống như LINE_BREAK_WORD_STYLE_NONE, như được hiển thị trong hình ảnh sau đây:

Đối với các dòng văn bản dài, LINE_BREAK_WORD_STYLE_AUTO sẽ áp dụng kiểu chữ không ngắt dòng để cải thiện khả năng đọc văn bản. Việc này cũng giống như áp dụng LINE_BREAK_WORD_STYLE_NONE.

Phông chữ Hentaigana mới của tiếng Nhật

Trong Android 15, một tệp phông chữ dành cho chữ Hiragana tiếng Nhật cũ (còn gọi là Hentaigana) được nhóm theo mặc định. Hình dạng độc đáo của các nhân vật trong Hentaigana có thể khiến nét đặc trưng riêng cho hình minh hoạ hoặc thiết kế, đồng thời vẫn giúp đảm bảo tính chính xác sự truyền tải và hiểu biết của các tài liệu cổ của Nhật Bản.

Kiểu ký tự và văn bản của Hentaigana tiếng Nhật phông chữ.

VideoLAN nón Bản quyền (c) 1996-2010 VideoLAN. Biểu trưng này hoặc phiên bản đã sửa đổi có thể được bất kỳ ai sử dụng hoặc sửa đổi để tham chiếu đến dự án VideoLAN hoặc bất kỳ sản phẩm nào do nhóm VideoLAN phát triển, nhưng không thể hiện sự chứng thực của dự án.

Vulkan và biểu trưng Vulkan là nhãn hiệu đã đăng ký của Khronos Group Inc.

OpenGL là một nhãn hiệu đã đăng ký và biểu trưng OpenGL ES là nhãn hiệu của Hewlett Packard Enterprise do Khronos sử dụng.