Android 15 mang đến cho nhà phát triển các tính năng và API tuyệt vời. Các phần sau đây tóm tắt những tính năng này để giúp bạn bắt đầu sử dụng các API có liên quan.
Để biết danh sách chi tiết về các API đã thêm, sửa đổi và 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 đã thêm, hãy truy cập vào tài liệu tham khảo về API cho Android. Đối với Android 15, hãy tìm các API đã thêm trong API cấp 35. Để tìm hiểu những thay đổi của nền tảng có thể tác động đến ứng dụng của bạn, hãy nhớ tham khảo các thay đổi về hành vi của Android 15 đối với ứng dụng nhắm đến Android 15 và tất cả ứng dụng.
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 nghe nhìn, đồng thời cung cấp cho bạn quyền truy cập vào các công cụ và phần cứng để hỗ trợ nhà sáng tạo hiện thực hoá ý tưởng của họ trên Android.
Để biết thêm về các tính năng và giải pháp mới nhất dành cho nhà phát triển về nội dung nghe nhìn và máy ảnh trên Android, hãy xem bài nói chuyện Tạo trải nghiệm nội dung nghe nhìn và máy ảnh hiện đại trên Android tại Google I/O.
Tăng cường ánh sáng yếu
Android 15 introduces Low Light Boost, an auto-exposure mode available to both Camera 2 and the night mode camera extension. Low Light Boost adjusts the exposure of the Preview stream in low-light conditions. This is different from how the night mode camera extension creates still images, because night mode combines a burst of photos to create a single, enhanced image. While night mode works very well for creating a still image, it can't create a continuous stream of frames, but Low Light Boost can. Thus, Low Light Boost enables camera capabilities, such as:
- Providing an enhanced image preview, so users are better able to frame their low-light pictures
- Scanning QR codes in low light
If you enable Low Light Boost, it automatically turns on when there's a low light level, and turns off when there's more light.
Apps can record off the Preview stream in low-light conditions to save a brightened video.
For more information, see Low Light Boost.
Các chế độ đ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ế độ
SINGLE
vàTORCH
trong khi chụp ảnh.
Điều khiển khoảng đầu vào 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.
Điều khiển độ lớn âm thanh
Android 15 introduces support for the CTA-2075 loudness standard to help you avoid audio loudness inconsistencies and ensure users don't have to constantly adjust volume when switching between content. The system leverages known characteristics of the output devices (headphones and speaker) along with loudness metadata available in AAC audio content to intelligently adjust the audio loudness and dynamic range compression levels.
To enable this feature, you need to ensure loudness metadata is available in
your AAC content and enable the platform feature in your app. For this, you
instantiate a LoudnessCodecController
object by
calling its create factory method with the audio
session ID from the associated AudioTrack
; this
automatically starts applying audio updates. You can pass an
OnLoudnessCodecUpdateListener
to modify or filter
loudness parameters before they are applied on the
MediaCodec
.
// Media contains metadata of type MPEG_4 OR MPEG_D
val mediaCodec = …
val audioTrack = AudioTrack.Builder()
.setSessionId(sessionId)
.build()
...
// Create new loudness controller that applies the parameters to the MediaCodec
try {
val lcController = LoudnessCodecController.create(mSessionId)
// Starts applying audio updates for each added MediaCodec
}
AndroidX media3 ExoPlayer will also be updated to use the
LoudnessCodecController
APIs for a seamless app integration.
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
dav1d, the popular AV1 software decoder from VideoLAN is available for Android devices that don't support AV1 decode in hardware. dav1d is up to 3x more performant than the legacy AV1 software decoder, enabling HD AV1 playback for more users, including some low and mid tier devices.
Your app needs to opt-in to using dav1d by invoking it by name
"c2.android.av1-dav1d.decoder"
. dav1d will be made the default AV1 software
decoder in a subsequent update. This support is standardized and backported to
Android 11 devices that receive Google Play system updates.
Công cụ và năng suất của nhà phát triển
Mặc dù hầu hết công việc của chúng tôi để cải thiện năng suất của bạn đều 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 hơn.
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:
- Quality-of-life improvements around NIO buffers
- Streams
- Additional
math
andstrictmath
methods util
package updates including sequencedcollection
,map
, andset
ByteBuffer
support inDeflater
- Security updates such as
X500PrivateCredential
and security key updates
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 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 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
.
Các điểm tinh chỉnh về tính năng tự động chuyển đổi ngôn ngữ
Android 14 added on-device, multi-language recognition in audio with automatic
switching between languages, but this can cause words to get dropped,
especially when languages switch with less of a pause between the two
utterances. Android 15 adds additional controls to help apps tune this switching
to their use case.
EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS
confines the automatic switching to the beginning of the audio session, while
EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES
deactivates the
language switching after a defined number of switches. These options are
particularly useful if you expect that there will be a single language spoken
during the session that should be autodetected.
Cải thiện API Phông chữ biến đổi OpenType
Android 15 improves the usability of the OpenType variable font. You can create
a FontFamily
instance from a variable font without specifying weight axes
with the buildVariableFamily
API. The text renderer overrides the value
of wght
axis to match the displaying text.
Using the API simplifies the code for creating a Typeface
considerably:
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();
Previously, to create the same Typeface
, you would need much more code:
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();
Here's an example of how a Typeface
created with both the old and new APIs
renders:
In this example, the Typeface
created with the old API doesn't have the
capability to create accurate font weights for the 350, 450, 550 and 650
Font
instances, so the renderer falls back to the closest weight. So in
this case, 300 is rendered instead of 350, 400 is rendered instead of 450, and
so on. By contrast, the Typeface
created with the new APIs dynamically creates
a Font
instance for a given weight, so accurate weights are rendered for 350,
450, 550, and 650 as well.
Các chế độ kiểm soát dấu ngắt dòng chi tiết
Kể từ Android 15, TextView
và trình ngắt dòng cơ bản có thể giữ nguyên phần văn bản nhất định trong cùng một dòng để cải thiện khả năng đọc. Bạn có thể tận dụng tính năng tuỳ chỉnh ngắt dòng này bằng cách sử dụng thẻ <nobreak>
trong tài nguyên chuỗi hoặc createNoBreakSpan
. Tương tự, bạn có thể giữ nguyên các từ không bị xuống dòng bằng cách sử dụng thẻ <nohyphen>
hoặc createNoHyphenationSpan
.
Ví dụ: tài nguyên chuỗi sau đây không có dấu ngắt dòng và hiển thị với văn bản "Pixel 8 Pro" bị ngắt ở vị trí không mong muốn:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
Ngược lại, tài nguyên chuỗi này bao gồm thẻ <nobreak>
, thẻ này gói cụm từ "Pixel 8 Pro" và ngăn chặn dấu ngắt dòng:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
Sự khác biệt trong cách hiển thị các chuỗi này được thể hiện trong các hình ảnh sau:
Lưu trữ ứng dụng
Android and Google Play announced support for app archiving last year, allowing users to free up space by partially removing infrequently used apps from the device that were published using Android App Bundle on Google Play. Android 15 includes OS level support for app archiving and unarchiving, making it easier for all app stores to implement it.
Apps with the REQUEST_DELETE_PACKAGES
permission can call the
PackageInstaller
requestArchive
method to request archiving an
installed app package, which removes the APK and any cached files, but persists
user data. Archived apps are returned as displayable apps through the
LauncherApps
APIs; users will see a UI treatment to highlight that those
apps are archived. If a user taps on an archived app, the responsible installer
will get a request to unarchive it, and the restoration process can be
monitored by the ACTION_PACKAGE_ADDED
broadcast.
Đồ hoạ
Android 15 mang đến các điểm cải tiến mới nhất về đồ hoạ, bao gồm cả ANGLE và các điểm bổ sung cho hệ thống đồ hoạ Canvas.
Hiện đại hoá quyền truy cập vào GPU của Android
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
Để 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++.
Các điểm cải tiến cho Canvas
Android 15 tiếp tục hiện đại hoá hệ thống đồ hoạ Canvas của Android với các tính năng mới:
Matrix44
cung cấp ma trận 4x4 để biến đổi các toạ độ nên dùng khi bạn muốn điều khiển canvas ở chế độ 3D.clipShader
giao cắt đoạn video hiện tại với chương trình đổ bóng được chỉ định, trong khiclipOutShader
đặt đối tượng cắt thành điểm khác biệt của đoạn video hiện tại và chương trình đổ bóng, mỗi chương trình coi chương trình đổ bóng là một mặt nạ alpha. Tính năng này hỗ trợ vẽ các hình dạng phức tạp một cách hiệu quả.
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 ứng dụng. Android 15 ra mắt các API giúp thực thi các tác vụ trong ứng dụng hiệu quả hơn, 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.
Để biết các phương pháp hay nhất giúp tiết kiệm pin, gỡ lỗi mạng và mức sử dụng pin, cũng như thông tin chi tiết về cách chúng tôi cải thiện hiệu quả 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 phát biểu Cải thiện hiệu quả pin của công việc ở chế độ nền trên Android tại Google I/O.
ApplicationStartInfo API
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
Kể từ Android 8.0 (API cấp 26), Android đã bao gồm API StorageStats.getAppBytes
nhằm tóm tắt kích thước cài đặt của một ứng dụng dưới dạng một số byte duy nhất, là tổng kích thước APK, kích thước của tệp được trích xuất từ APK và các tệp được tạo trên thiết bị như mã biên dịch trước khi chạy (AOT). Con số này chưa cho thấy
nhiều thông tin chi tiết về cách ứng dụng của bạn đang sử dụng bộ nhớ.
Android 15 bổ sung API StorageStats.getAppBytesByDataType([type])
, cho phép bạn nắm được thông tin chi tiết về cách ứng dụng đang sử dụng hết dung lượng đó, bao gồm cả việc phân tách tệp APK, mã AOT và tăng tốc, siêu dữ liệu dex, thư viện và hồ sơ có hướng dẫn.
Phân tích tài nguyên 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 hạn như tệp báo lỗi, hồ sơ vùng nhớ khối xếp, lấy mẫu ngăn xếp, v.v. Mã này cung cấp lệnh gọi lại cho ứng dụng kèm theo thẻ đã cung cấp để xác định tệp đầu ra. Tệp này được phân phối đến thư mục tệp của ứng dụng. API này giới hạn tốc độ để giảm thiểu tác động đến hiệu suất.
Để đơn giản hoá việc tạo các yêu cầu phân tích tài nguyên trong ứng dụng, bạn nên sử dụng API AndroidX Profiling
tương ứng, có trong Core 1.15.0-rc01 trở lên.
Cải tiến cơ sở dữ liệu SQLite
Android 15 giới thiệu các API SQLite 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 đề hiệu suất cụ thể có thể xuất hiện trong ứng dụng. Các API này đi kèm với bản cập nhật SQLite cho phiên bản 3.44.3.
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 nhạy cảm với độ trễ.
- Giao dịch bị hoãn chỉ có thể đọc: khi thực hiện các giao dịch có
chỉ đọc (không bao gồm câu lệnh ghi), hãy sử dụng
beginTransactionReadOnly()
vàbeginTransactionWithListenerReadOnly(SQLiteTransactionListener)
để phát hành giao dịchDEFERRED
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ịchIMMEDIATE
hoặcEXCLUSIVE
. - Số lượng hàng và mã nhận dạng: Các API được thêm vào để truy xuất số lượng hàng đã thay đổi
hàng hoặc mã hàng được chèn gần đây nhất mà không tạo thêm truy vấn.
getLastChangedRowCount()
trả về số lượng hàng được chèn, cập nhật hoặc xoá bởi câu lệnh SQL gần đây nhất trong giao dịch hiện tại, trong khigetTotalChangedRowCount()
sẽ 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ần 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 thuận tiện và mọi chi phí xử lý bổ sung mà chúng có thể phát sinh.
Bản cập nhật Khung hiệu suất động Android
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 có 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 tính năng 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 chức năng 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ác tham số truy vấn URL, phân đoạn 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 thẻ <data>
sử dụng các thuộc tính thẻ dữ liệu hiện có cũng như thuộc tính android:query
và android:fragment
.
Sau đâ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" />
<category android:name="android.intent.category.DEFAULT" />
<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ư
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:
- Ứng dụng có logic cho hồ sơ công việc giả định rằng bất kỳ các bản sao đã cài đặt của ứng dụng không có trong hồ sơ chính nằm trong hồ sơ công việc.
- Ứng dụng y tế
- Ứng dụng trình chạy
- Ứng dụng trên cửa hàng ứng dụng
Truy vấn lựa chọn gần đây nhất của người dùng đối với quyền truy cập vào ảnh đã chọn
Giờ đây, ứng dụng chỉ có thể làm nổi bật những ảnh và video được chọn gần đây nhất khi được cấp quyền truy cập một phần vào quyền truy cập nội dung nghe nhìn. Tính năng 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, hãy bật đối số QUERY_ARG_LATEST_SELECTION_ONLY
khi truy vấn MediaStore
thông qua 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 includes the latest Android Ad Services extensions, incorporating the latest version of the Privacy Sandbox on Android. This addition is part of our work to develop technologies that improve user privacy and enable effective, personalized advertising experiences for mobile apps. Our privacy sandbox page has more information about the Privacy Sandbox on Android developer preview and beta programs to help you get started.
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:
- Mục tiêu hoàn thành liên quan đến lượng calo đã đốt cháy, quãng đường, thời lượng, số lần lặp lại và số bước.
- Mục tiêu về hiệu suất liên quan đến việc thực hiện nhiều lần nhất có thể (AMRAP), tốc độ, nhịp tim, công suất, tốc độ gắng sức được nhận thấy và tốc độ.
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àn hình ứng dụng
Android 15 supports app screen sharing so users can share or record just an
app window rather than the entire device screen. This feature, first enabled in
Android 14 QPR2, includes
MediaProjection
callbacks that allow your app
to customize the app screen sharing experience. Note that for apps targeting
Android 14 (API level 34) or higher,
user consent is required for each
MediaProjection
capture session.
Trải nghiệm người dùng và giao diện người dùng hệ thống
Android 15 giúp nhà phát triển ứng dụng và người dùng có nhiều quyền kiểm soát và linh hoạt hơn khi đị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 của ứng dụng, hãy xem bài nói chuyện Cải thiện trải nghiệm người dùng của ứng dụng Android tại Google I/O.
Bản xem trước tiện ích phong phú hơn với API Bản xem trước được tạo
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 một hình ảnh hoặc tài nguyên bố cục tĩnh. Các bản xem trước này thường khác biệt đáng kể với giao diện của tiện ích thực tế khi được đặt trên màn hình chí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à trình cung cấp tiện ích ứng dụng có thể tạo RemoteViews
để dùng làm bản xem trước bộ chọn, thay vì tài nguyên tĩnh.
API Đẩy
Ứng dụng có thể cung cấp bản xem trước đã tạo thông qua API đẩy. Ứ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ủ lưu trữ để cung cấp bản xem trước. Bản xem trước được lưu trữ trong AppWidgetService
và máy chủ lưu trữ có thể yêu cầu bản xem trước theo yêu cầu. Ví dụ sau đây tải tài nguyên bố cục tiện ích XML 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)
)
Quy trình dự kiến là:
- 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 được cung cấp sẽ được lưu trữ trongAppWidgetService
cùng với thông tin khác của nhà cung cấp. setWidgetPreview
thông báo cho máy chủ lưu trữ về bản xem trước đã cập nhật thông qua lệnh gọi lạiAppWidgetHost.onProvidersChanged
. Để phản hồi, máy chủ của tiện ích sẽ tải lại tất cả thông tin của nhà cung cấp.- 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ọiAppWidgetManager.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ể thiết lập bản xem trước sau khi người dùng đăng nhập hoặc đã định cấu hình ban đầu trong ứng dụng của họ. Sau đó, họ có thể thiết lập một tác vụ định kỳ để cập nhật bản xem trước theo tần suất mà 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 phải tuân theo 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 giới thiệu các thay đổi trong tính năng Hình trong hình (PiP) để đảm bảo quá trình chuyển đổi diễn ra suôn sẻ hơn khi chuyển sang chế độ PiP. Điều này sẽ có lợi cho các ứng dụng có các thành phần giao diện người dùng được phủ lên giao diện người dùng chính, chuyển sang chế độ PiP.
Nhà phát triển sử dụng lệnh gọi lại onPictureInPictureModeChanged
để xác định logic bật/tắt chế độ hiển thị của các thành phần giao diện người dùng được phủ lên. Lệnh gọi lại này được kích hoạt khi ảnh động vào hoặc thoát PiP hoàn tất. Kể từ Android 15, lớp PictureInPictureUiState
bao gồm một trạng thái khác.
Với trạng thái giao diện người dùng này, các ứng dụng nhắm đến Android 15 (API cấp 35) sẽ quan sát thấy lệnh gọi lại Activity#onPictureInPictureUiStateChanged
được gọi bằng isTransitioningToPip()
ngay khi ảnh động trong Hình trong hình bắt đầu. Có nhiều thành phần trên giao diện người dùng không liên quan đến ứng dụng khi ở chế độ PiP, chẳng hạn như thành phần hiển thị hoặc bố cục có chứa thông tin như đề xuất, video sắp ra mắt, điểm xếp hạng và tiêu đề. Khi ứng dụng chuyển sang chế độ Hình trong hình, hãy sử dụng lệnh gọi lại onPictureInPictureUiStateChanged
để ẩn các thành phần này trên giao diện người dùng. Khi ứng dụng chuyển sang chế độ toàn màn hình từ cửa sổ Hình trong hình, hãy sử dụng lệnh gọi lại onPictureInPictureModeChanged
để hiện các phần tử này, như trong các ví dụ sau:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
Nút bật/tắt chế độ hiển thị nhanh các thành phần giao diện người dùng không liên quan (đối với cửa sổ PiP) giúp đảm bảo ảnh động chuyển vào PiP mượt mà và không nhấp nháy.
Cải tiến quy tắc Không làm phiền
AutomaticZenRule
cho phép các ứng dụng tuỳ chỉnh các quy tắc Quản lý sự chú ý (Không làm phiền) và quyết định thời điểm kích hoạt hoặc huỷ kích hoạt các quy tắc đó. Android 15 cải thiện đáng kể các quy tắc này với mục tiêu cải thiện trải nghiệm người dùng. Các điểm cải tiến sau đây:
- Thêm các loại vào
AutomaticZenRule
, cho phép hệ thống áp dụng các loại đặc biệt xử lý tín dụng đối với một số quy tắc. - Thêm một biểu tượng vào
AutomaticZenRule
, giúp cải thiện các chế độ có thể nhận ra. - Thêm một chuỗi
triggerDescription
vàoAutomaticZenRule
để mô tả các điều kiện mà quy tắc sẽ bắt đầu hoạt động cho người dùng. - Thêm
ZenDeviceEffects
vàoAutomaticZenRule
, cho phép các quy tắc kích hoạt những tính năng như hiển thị thang màu xám, chế độ ban đêm hoặc giảm độ sáng hình nền.
Đặt VibrationEffect cho các 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.
Khối thanh trạng thái của tính năng chiếu nội dung nghe nhìn và tính năng tự động dừng
Media projection can expose private user information. A new, prominent status bar chip makes users aware of any ongoing screen projection. Users can tap the chip to stop screen casting, sharing, or recording. Also, for a more intuitive user experience, any in‑progress screen projection now automatically stops when the device screen is locked.
Màn hình lớn và kiểu dáng
Android 15 hỗ trợ ứng dụng của bạn khai thác tối đa các kiểu dáng của Android, bao gồm màn hình lớn, thiết bị có thể xoay và thiết bị có thể gập lại.
Cải thiện khả năng đa nhiệm trên màn hình lớn
Android 15 mang đến cho người dùng nhiều cách tốt hơn để làm nhiều việc cùng lúc trên các thiết bị có màn hình lớn. Để Ví dụ: người dùng có thể lưu các kiểu kết hợp ứng dụng mà họ yêu thích ở chế độ chia đôi màn hình để hãy truy cập và ghim thanh tác vụ trên màn hình để chuyển đổi nhanh giữa các ứng dụng. Điều này có nghĩa là việc đảm bảo ứng dụng của bạn có khả năng thích ứng là quan trọng hơn bao giờ hết.
Google I/O có các phiên về chủ đề Xây dựng Android thích ứng ứng dụng và Xây dựng giao diện người dùng bằng Material 3 thư viện thích ứng có thể hữu ích, và tài liệu của chúng tôi có nhiều tài liệu hơn để giúp bạn Thiết kế cho màn hình.
Hỗ trợ màn hình bao phủ
Ứ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 để cho phép ứng dụng của bạn sử dụng các tiến bộ mới nhất trong công nghệ không dây và giao tiếp.
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.
Trải nghiệm NFC mượt mà hơn
Android 15 is working to make the tap to pay experience more seamless and
reliable while continuing to support Android's robust NFC app ecosystem. On
supported devices, apps can request the NfcAdapter
to enter
observe mode, where the device listens but doesn't respond to NFC
readers, sending the app's NFC service PollingFrame
objects to process. The PollingFrame
objects can be used to auth
ahead of the first communication to the NFC reader, allowing for a one tap
transaction in many cases.
In addition, apps can register a filter on supported devices so they can be notified of polling loop activity, which allows for smooth operation with multiple NFC-aware applications.
Vai trò của 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 khả năng bảo mật của ứng dụng, bảo vệ dữ liệu của ứng dụng và mang đến cho người dùng nhiều thông tin minh bạch hơn cũng như quyền kiểm soát đối với dữ liệu của họ. Xem bài phát biểu Bảo vệ tính bảo mật của 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 làm để cải thiện biện pháp bảo vệ người dùng và bảo vệ ứng dụng của bạn khỏi 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 trên URI nội dung
Android 15 introduces a set of APIs that perform permission checks on content URIs:
Context.checkContentUriPermissionFull
: This performs a full permission check on content URIs.Activity
manifest attributerequireContentUriPermissionFromCaller
: This enforces specified permissions on the provided content URIs at activity launch.ComponentCaller
class forActivity
callers: This represents the app that launched the activity.
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 bổ sung cho trải nghiệm người dùng khi thiết bị được sử dụng bằng nhiều ngôn ngữ.
Phông chữ biến đổi 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ăn chỉnh 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.
Cấu hình ngắt dòng tự động
Android started supporting phrase-based line breaks for Japanese and Korean in
Android 13 (API level 33). However, while phrase-based line breaks improve the
readability of short lines of text, they don't work well for long lines of text.
In Android 15, apps can apply phrase-based line breaks only for short lines
of text, using the LINE_BREAK_WORD_STYLE_AUTO
option. This option selects the best word style option for the text.
For short lines of text, phrase-based line breaks are used, functioning the same
as LINE_BREAK_WORD_STYLE_PHRASE
, as shown in the
following image:
For longer lines of text, LINE_BREAK_WORD_STYLE_AUTO
uses a no
line-break word style, functioning the same as
LINE_BREAK_WORD_STYLE_NONE
, as shown in the
following image:
Phông chữ Hentaigana tiếng Nhật bổ sung
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.
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.