Android 9 (API cấp 28) giới thiệu các tính năng và khả năng mới tuyệt vời cho Người dùng và nhà phát triển. Tài liệu này nêu bật những tính năng mới dành cho nhà phát triển.
Để tìm hiểu về các API mới, hãy đọc báo cáo điểm khác biệt về API hoặc truy cập vào Tài liệu tham khảo về API của Android. Ngoài ra, hãy nhớ thanh toán Các thay đổi về hành vi của Android 9 cần tìm hiểu về những khía cạnh mà những thay đổi của nền tảng có thể ảnh hưởng đến ứng dụng của bạn.
Định vị trong nhà bằng tin nhắn theo thời gian thực (RTT) của Wi-Fi
Android 9 hỗ trợ chuẩn Wi-Fi IEEE 802.11-2016 giao thức—còn gọi là Thời gian trọn vòng của Wi-Fi (RTT) để giúp bạn tận dụng về vị trí trong nhà trong ứng dụng của bạn.
Trên thiết bị chạy Android 9 có hỗ trợ phần cứng, ứng dụng của bạn có thể sử dụng
API RTT để đo lường
khoảng cách đến các điểm truy cập (AP) Wi-Fi ở gần có hỗ trợ RTT. Thiết bị phải có
đã bật dịch vụ vị trí và bật quét tìm Wi-Fi (trong
Cài đặt > Vị trí) và ứng dụng của bạn phải có
ACCESS_FINE_LOCATION
quyền. Thiết bị này không cần kết nối với các điểm truy cập để sử dụng tính năng RTT.
Để đảm bảo quyền riêng tư, chỉ điện thoại đó mới có thể xác định khoảng cách đến
điểm truy cập; điểm truy cập không có thông tin này.
Nếu thiết bị của bạn đo khoảng cách đến 3 điểm truy cập trở lên, bạn có thể sử dụng thuật toán đa phương để ước tính vị trí thiết bị phù hợp nhất với thiết bị đo lường. Kết quả thường chính xác trong vòng 1 đến 2 mét.
Với độ chính xác này, bạn có thể tạo ra các trải nghiệm mới, chẳng hạn như chỉ đường trong toà nhà và các dịch vụ dựa trên vị trí chi tiết, chẳng hạn như điều khiển bằng giọng nói khó phân biệt (ví dụ: "Bật đèn này") và thông tin dựa trên vị trí (chẳng hạn như "Có ưu đãi đặc biệt cho sản phẩm này không?").
Xem API RTT Wi-Fi đang được sử dụng trong Ứng dụng minh hoạ Android WifiRttScan.
Để biết thêm thông tin, hãy xem Vị trí Wi-Fi: phạm vi có thời gian trọn vòng (RTT).
Hỗ trợ vết cắt trên màn hình
Android 9 hỗ trợ các màn hình tràn viền mới nhất
có vết cắt trên màn hình của camera và loa. Chiến lược phát hành đĩa đơn
DisplayCutout
giúp bạn tìm ra vị trí và hình dạng của các khu vực không hoạt động nơi
nội dung không được hiển thị. Để xác định sự tồn tại và vị trí của
những vùng cắt này, hãy sử dụng
getDisplayCutout()
.
Thuộc tính bố cục cửa sổ mới
layoutInDisplayCutoutMode
!
cho phép ứng dụng của bạn bố trí nội dung xung quanh các vết cắt của thiết bị. Bạn có thể đặt
thuộc tính này cho một trong các giá trị sau:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
Bạn có thể mô phỏng vết cắt trên màn hình trên bất kỳ thiết bị hoặc trình mô phỏng nào chạy Android 9 như sau:
- Bật tuỳ chọn cho nhà phát triển.
- Trong màn hình Tuỳ chọn cho nhà phát triển, cuộn xuống phần Bản vẽ rồi chọn Mô phỏng màn hình có vết cắt.
- Chọn kích thước của vết cắt.
Thông báo
Android 9 giới thiệu một số tính năng nâng cao cho thông báo, tất cả đều được cung cấp cho những nhà phát triển nhắm đến API cấp 28 trở lên.
Để biết mã mẫu sử dụng thông báo, bao gồm cả các tính năng của Android 9, hãy xem Mọi người Mẫu.
Trải nghiệm nhắn tin nâng cao
Kể từ Android 7.0 (API cấp 24), bạn có thể thêm một thao tác để trả lời tin nhắn hoặc nhập văn bản khác trực tiếp từ thông báo. Các điểm cải tiến của Android 9 tính năng này cùng với những cải tiến sau:
Hỗ trợ đơn giản cho những người tham gia cuộc trò chuyện:
Person
lớp học được dùng để xác định những người tham gia vào một cuộc trò chuyện, bao gồm hình đại diện và URI. Nhiều API khác, chẳng hạn nhưaddMessage()
! nay tận dụng lớpPerson
thay vìCharSequence
. LớpPerson
cũng hỗ trợ mẫu thiết kế Builder.Hỗ trợ hình ảnh: Android 9 hiện hiển thị hình ảnh trong Thông báo nhắn tin trên điện thoại. Bạn có thể sử dụng
setData()
vào thông báo để hiển thị hình ảnh. Đoạn mã sau đây minh hoạ cách để tạoPerson
và một thông báo chứa hình ảnh.
Kotlin
// Create new Person. val sender = Person() .setName(name) .setUri(uri) .setIcon(null) .build() // Create image message. val message = Message("Picture", time, sender) .setData("image/", imageUri) val style = Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message)
Java
// Create new Person. Person sender = new Person() .setName(name) .setUri(uri) .setIcon(null) .build(); // Create image message. Message message = new Message("Picture", time, sender) .setData("image/", imageUri); Notification.MessagingStyle style = new Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message);
Lưu câu trả lời dưới dạng bản nháp: Ứng dụng của bạn có thể truy xuất
EXTRA_REMOTE_INPUT_DRAFT
do hệ thống gửi khi người dùng vô tình đóng thông báo nhắn tin. Bạn có thể dùng dữ liệu bổ sung này để điền sẵn các trường văn bản trong ứng dụng và giúp người dùng có thể hoàn thành câu trả lời của họ.Xác định xem một cuộc trò chuyện có phải là cuộc trò chuyện nhóm hay không: Bạn có thể sử dụng
setGroupConversation()
để xác định một cuộc trò chuyện là cuộc trò chuyện nhóm hay cuộc trò chuyện không theo nhóm.Đặt thao tác ngữ nghĩa cho một ý định:
setSemanticAction()
cho phép bạn cung cấp ý nghĩa ngữ nghĩa cho một hành động, chẳng hạn như là "đánh dấu là đã đọc", "xoá" "trả lời" và cứ tiếp tục như vậy.Trả lời thông minh: Android 9 hỗ trợ các câu trả lời đề xuất tương tự có trong nhắn tin. Sử dụng
RemoteInput.setChoices()
để cung cấp một loạt các phản hồi chuẩn cho người dùng.
Chế độ cài đặt kênh, thông báo phát đi và chế độ Không làm phiền
Android 8.0 giới thiệu Kênh thông báo, cho phép bạn tạo một cho từng loại thông báo mà bạn muốn hiển thị. Android 9 đơn giản hoá chế độ cài đặt kênh thông báo nhờ những thay đổi sau:
Chặn nhóm kênh: Giờ đây, người dùng có thể chặn toàn bộ các nhóm kênh trong phần cài đặt thông báo cho ứng dụng. Bạn có thể sử dụng
isBlocked()
để xác định thời điểm một nhóm bị chặn và do đó, không gửi bất kỳ cho các kênh trong nhóm đó.Ngoài ra, ứng dụng của bạn có thể truy vấn các chế độ cài đặt hiện tại của nhóm kênh bằng cách sử dụng cái mới
getNotificationChannelGroup()
.Các loại ý định truyền tin mới: Hệ thống Android hiện gửi ý định truyền tin khi trạng thái chặn của kênh thông báo và nhóm kênh thay đổi. Ứng dụng sở hữu kênh hoặc nhóm bị chặn có thể theo dõi những ý định này và phản ứng theo cách phù hợp. Để biết thêm thông tin về các thao tác theo ý định và nội dung bổ sung này, tham chiếu đến danh sách hằng số được cập nhật trong
NotificationManager
tham chiếu. Để biết thông tin về cách phản ứng với ý định truyền tin, hãy tham khảo Chương trình phát sóng.NotificationManager.Policy
có 3 danh mục ưu tiên mới Không làm phiền:PRIORITY_CATEGORY_ALARMS
ưu tiên các chuông báo.PRIORITY_CATEGORY_MEDIA
ưu tiên âm thanh từ các nguồn nội dung nghe nhìn, chẳng hạn như nội dung nghe nhìn và điều hướng bằng giọng nói.PRIORITY_CATEGORY_SYSTEM
sẽ ưu tiên âm thanh hệ thống.
NotificationManager.Policy
cũng có 7 hằng số Do-Not-Disturb mới có thể dùng để ngăn tình trạng gián đoạn hình ảnh:SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
Ngăn thông báo chạy hoạt động toàn màn hình.SUPPRESSED_EFFECT_LIGHTS
chặn đèn thông báo.SUPPRESSED_EFFECT_PEEK
ngăn thông báo trượt nhanh vào chế độ xem ("hiển thị nhanh").SUPPRESSED_EFFECT_STATUS_BAR
Ngăn thông báo xuất hiện trong thanh trạng thái trên các thiết bị hỗ trợ thanh trạng thái.SUPPRESSED_EFFECT_BADGE
chặn huy hiệu trên các thiết bị hỗ trợ huy hiệu. Để biết thêm thông tin, hãy tham khảo Sửa đổi huy hiệu thông báo.SUPPRESSED_EFFECT_AMBIENT
chặn thông báo trên các thiết bị hỗ trợ màn hình chờ theo môi trường xung quanh.SUPPRESSED_EFFECT_NOTIFICATION_LIST
Ngăn thông báo xuất hiện trong chế độ xem danh sách trên các thiết bị hỗ trợ chế độ xem danh sách, chẳng hạn như ngăn thông báo hoặc màn hình khoá.
Hỗ trợ nhiều camera và cập nhật camera
Trên các thiết bị chạy Android 9, bạn có thể truy cập vào bảng tin đồng thời hai hoặc nhiều thiết bị camera. Trên các thiết bị có máy ảnh kép mặt trước hoặc mặt sau, bạn có thể tạo các tính năng tiên tiến không thể dùng với chỉ một máy ảnh, chẳng hạn như tính năng liền mạch thu phóng, hiệu ứng bokeh và hình ảnh nổi. API này cũng cho phép bạn gọi một hàm logic hoặc hợp nhất luồng camera tự động chuyển đổi giữa 2 hoặc nhiều camera.
Các cải tiến khác về máy ảnh bao gồm Phiên hoạt động bổ sung tham số giúp giảm độ trễ trong quá trình chụp ảnh ban đầu và chia sẻ nền tảng cho phép ứng dụng máy ảnh xử lý nhiều trường hợp sử dụng mà không cần dừng hay bắt đầu lại luồng camera. Chúng tôi cũng đã thêm các API cho flash dựa trên hiển thị hỗ trợ và quyền truy cập vào OIS dấu thời gian để ổn định hình ảnh cấp ứng dụng và các hiệu ứng đặc biệt.
Trong Android 9, tính năng nhiều camera
API
hỗ trợ máy ảnh đơn sắc cho các thiết bị có
FULL
hoặc
Chức năng LIMITED
.
Đầu ra đơn sắc đạt được thông qua
YUV_420_888
trong đó Y là thang độ xám, U (Cb) là 128 và V (Cr) là 128.
Android 9 cũng cho phép hỗ trợ USB/UVC bên ngoài camera bật thiết bị được hỗ trợ.
ImageDecoder cho các đối tượng có thể vẽ và bitmap
Android 9 ra mắt
ImageDecoder
mang đến một phương pháp hiện đại hoá để giải mã hình ảnh. Sử dụng lớp học này
thay cho BitmapFactory
và BitmapFactory.Options
API.
ImageDecoder
cho phép bạn tạo
Drawable
hoặc một
Bitmap
từ vùng đệm byte, một tệp
hoặc URI. Để giải mã hình ảnh, trước tiên hãy gọi
createSource()
bằng nguồn của hình ảnh được mã hoá. Sau đó, gọi
decodeDrawable()
hoặc decodeBitmap()
bằng cách truyền ImageDecoder.Source
để tạo Drawable
hoặc Bitmap
. Để thay đổi
cài đặt mặc định, chuyển OnHeaderDecodedListener
đến
decodeDrawable()
hoặc decodeBitmap()
. ImageDecoder
cuộc gọi
onHeaderDecoded()
với chiều rộng và chiều cao mặc định của hình ảnh khi đã biết thông tin.
Nếu hình ảnh được mã hoá là ảnh GIF hoặc WebP động, thì decodeDrawable()
sẽ trả về một
Drawable
là một thực thể của
AnimatedImageDrawable
.
Bạn có thể sử dụng nhiều phương pháp để đặt thuộc tính hình ảnh:
- Để điều chỉnh tỷ lệ hình ảnh đã giải mã đến một kích thước chính xác, hãy chuyển các kích thước mục tiêu vào
setTargetSize()
. Bạn cũng có thể điều chỉnh tỷ lệ hình ảnh bằng cách sử dụng một kích thước mẫu. Truyền trực tiếp kích thước mẫu đếnsetTargetSampleSize()
. - Để cắt hình ảnh trong phạm vi của hình ảnh được điều chỉnh theo tỷ lệ, hãy gọi
setCrop()
. - Để tạo một bitmap có thể thay đổi, hãy truyền
true
vàosetMutableRequired()
.
ImageDecoder
cũng cho phép bạn thêm các hiệu ứng tuỳ chỉnh và phức tạp vào hình ảnh
chẳng hạn như góc bo tròn hoặc
mặt nạ hình tròn. Sử dụng
setPostProcessor()
với một bản sao của
PostProcessor
để thực thi bất kỳ lệnh vẽ nào mà bạn muốn.
Ảnh động
Android 9 ra mắt
AnimatedImageDrawable
để vẽ và hiển thị hình ảnh động GIF và WebP.
AnimatedImageDrawable
hoạt động tương tự như
AnimatedVectorDrawable
trong đó luồng kết xuất điều khiển ảnh động của AnimatedImageDrawable
.
Luồng kết xuất cũng sử dụng luồng worker để giải mã, nhờ đó việc giải mã không
can thiệp vào các thao tác khác trên luồng kết xuất. Phương thức triển khai này cho phép
ứng dụng của bạn để hiển thị hình ảnh động mà không cần quản lý các bản cập nhật của ứng dụng hoặc
can thiệp vào các sự kiện khác trên luồng giao diện người dùng của ứng dụng.
Có thể giải mã AnimatedImageDrawable
bằng cách sử dụng một bản sao của
ImageDecoder
. Nội dung sau đây
đoạn mã cho biết cách sử dụng ImageDecoder
để giải mã
AnimatedImageDrawable
:
Kotlin
@Throws(IOException::class) private fun decodeImage() { val decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(resources, R.drawable.my_drawable)) // Prior to start(), the first frame is displayed. (decodedAnimation as? AnimatedImageDrawable)?.start() }
Java
private void decodeImage() throws IOException { Drawable decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(getResources(), R.drawable.my_drawable)); if (decodedAnimation instanceof AnimatedImageDrawable) { // Prior to start(), the first frame is displayed. ((AnimatedImageDrawable) decodedAnimation).start(); } }
ImageDecoder
có một số phương thức cho phép bạn chỉnh sửa hình ảnh thêm.
Ví dụ: bạn có thể sử dụng
setPostProcessor()
để sửa đổi giao diện của hình ảnh, chẳng hạn như áp dụng mặt nạ hình tròn hoặc
các góc tròn.
Video HDR VP9, nén hình ảnh HEIF và API đa phương tiện
Android 9 cung cấp hỗ trợ tích hợp cho Cấu hình VP9 có Dải động cao (HDR) 2, để bạn có thể phân phối phim hỗ trợ HDR cho người dùng của mình từ YouTube, Play Phim và các nguồn khác trên thiết bị có hỗ trợ HDR.
Android 9 cũng hỗ trợ thêm việc mã hoá hình ảnh bằng Hình ảnh hiệu quả cao
Định dạng tệp (HEIF
hoặc HEIC), giúp cải thiện khả năng nén và giảm không gian lưu trữ cũng như dữ liệu mạng
mức sử dụng. Mẫu ảnh tĩnh HEIF được hỗ trợ trong
MediaMuxer
và MediaExtractor
khác. Với sự hỗ trợ nền tảng trên các thiết bị Android 9, bạn có thể dễ dàng gửi và
sử dụng hình ảnh HEIF từ máy chủ phụ trợ của bạn. Sau khi bạn đã đảm bảo rằng
ứng dụng tương thích với định dạng dữ liệu này để chia sẻ và hiển thị, hãy dùng thử HEIF
làm định dạng lưu trữ hình ảnh trong ứng dụng của bạn. Bạn có thể thực hiện chuyển đổi jpeg sang heic
sử dụng ImageDecoder
hoặc
BitmapFactory
(sẽ nhận
bitmap từ tệp JPEG). Sau đó, bạn có thể sử dụng
HeifWriter
để ghi HEIF
hình ảnh tĩnh từ bộ đệm byte YUV hoặc các bản sao của
Surface
hoặc
Bitmap
.
Bạn cũng có thể xem các chỉ số về nội dung nghe nhìn ở
AudioTrack
!
AudioRecord
!
và MediaDrm
lớp học.
Android 9 giới thiệu các phương thức cho
Lớp MediaDRM
để nhận chỉ số, HDCP
các cấp, mức độ bảo mật và số phiên, cũng như để tăng thêm khả năng kiểm soát
các mức bảo mật và điểm dừng an toàn. Xem Điểm khác biệt về API
để biết thông tin chi tiết.
Trong Android 9, API AAudio thêm
hỗ trợ một số thuộc tính AAudioStream bổ sung, bao gồm cả cách sử dụng, nội dung
và giá trị đặt trước. Khi sử dụng những thuộc tính này, bạn có thể tạo sự kiện phát trực tiếp
được điều chỉnh cho các ứng dụng VoIP hoặc máy quay video. Bạn cũng có thể đặt mã phiên thành
liên kết luồng AAudio với tuyển tập phụ có thể chứa các hiệu ứng. Sử dụng
AudioEffect
API để kiểm soát
các hiệu ứng.
Android 9 ra mắt
AudioEffect
API cho
xử lý động.
Với lớp này, bạn có thể tạo hiệu ứng âm thanh dựa trên kênh, bao gồm
cân bằng âm thanh, nén nhiều băng tần và giới hạn — qua nhiều giai đoạn. Chiến lược phát hành đĩa đơn
số lượng băng tần và giai đoạn hoạt động có thể định cấu hình và hầu hết các thông số có thể được định cấu hình
kiểm soát theo thời gian thực.
Mức độ nhạy cảm của chi phí dữ liệu trong JobScheduler
Kể từ Android 9, JobScheduler
có thể sử dụng các tín hiệu trạng thái mạng do nhà mạng cung cấp để cải thiện quá trình xử lý
công việc liên quan đến mạng.
Công việc có thể khai báo kích thước dữ liệu ước tính, tìm nạp trước tín hiệu và chỉ định
các yêu cầu chi tiết về mạng. Sau đó, JobScheduler
sẽ quản lý công việc theo
trạng thái mạng. Ví dụ: khi tín hiệu mạng cho biết đang nghẽn,
JobScheduler
có thể trì hoãn các yêu cầu mạng lớn. Khi ở trên
mạng không đo lượng dữ liệu, JobScheduler
có thể chạy các công việc tìm nạp trước để
cải thiện trải nghiệm người dùng, chẳng hạn như bằng cách tìm nạp trước dòng tiêu đề.
Khi thêm công việc, hãy nhớ sử dụng setEstimatedNetworkBytes()
,
setPrefetch()
!
và setRequiredNetwork()
khi thích hợp để trợ giúp
JobScheduler
xử lý công việc đúng cách. Khi công việc của bạn thực thi,
hãy nhớ sử dụng đối tượng Network
được trả về bởi
JobParameters.getNetwork()
.
Nếu không, bạn sẽ ngầm sử dụng mạng mặc định của thiết bị
có thể không đáp ứng yêu cầu của bạn, dẫn đến việc sử dụng dữ liệu ngoài ý muốn.
Neural Networks API 1.1
Ra mắt Neural Networks API trong Android 8.1 (API cấp 27) để tăng tốc công nghệ học máy trên thiết bị Android. Android 9 mở rộng và cải thiện API, bổ sung thêm hỗ trợ 9 hoạt động mới:
- Phép toán trên các phần tử tương ứng:
- Toán tử mảng:
Vấn đề đã biết: Khi chuyển
ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
tensor thành
ANEURALNETWORKS_PAD
hoạt động, có sẵn trên Android 9 trở lên,
đầu ra từ NNAPI có thể không khớp với đầu ra của máy cấp cao hơn
khung học tập, chẳng hạn như
TensorFlow Lite Bạn
chỉ nên chuyển
ANEURALNETWORKS_TENSOR_FLOAT32
cho đến khi vấn đề được giải quyết.
Ngoài ra, API này cũng giới thiệu một hàm mới,
ANeuralNetworksModel_relaxComputationFloat32toFloat16()
!
cho phép bạn chỉ định xem cần tính
ANEURALNETWORKS_TENSOR_FLOAT32
có phạm vi và độ chính xác thấp như của dấu phẩy động 16 bit IEEE 754
.
Khung tự động điền
Android 9 giới thiệu nhiều điểm cải tiến về tính năng tự động điền các dịch vụ có thể triển khai để nâng cao hơn nữa trải nghiệm người dùng khi điền thông tin biểu mẫu. Để tìm hiểu thêm về cách sử dụng các tính năng tự động điền trong ứng dụng, hãy xem Hướng dẫn về Khung tự động điền.
Các tính năng nâng cao về bảo mật
Android 9 giới thiệu một số tính năng bảo mật mà các phần sau đây sẽ tóm tắt:
Xác nhận bảo vệ của Android
Các thiết bị được hỗ trợ chạy Android 9 trở lên cung cấp cho bạn khả năng sử dụng API Xác nhận bảo vệ của Android. Khi sử dụng quy trình làm việc này, ứng dụng sẽ hiện lời nhắc cho người dùng để yêu cầu họ phê duyệt một câu lệnh ngắn. Câu này cho phép ứng dụng khẳng định lại rằng người dùng muốn hoàn tất một giao dịch nhạy cảm, chẳng hạn như thanh toán.
Nếu người dùng chấp nhận tuyên bố này, Kho khoá Android sẽ nhận được và lưu trữ một
chữ ký mã hoá được bảo vệ bằng cơ chế xác thực thông điệp có khoá băm
(HMAC). Sau khi Kho khoá Android xác nhận tính hợp lệ của thông báo, ứng dụng của bạn
có thể sử dụng khoá được tạo từ trustedConfirmationRequired
trong phần
môi trường thực thi (TEE) để ký thông báo mà người dùng đã chấp nhận. Chiến lược phát hành đĩa đơn
chữ ký này cho biết với độ tin cậy rất cao rằng người dùng đã xem
và đã đồng ý với điều đó.
Thận trọng: API Xác nhận bảo vệ của Android không cung cấp kênh thông tin bảo mật cho người dùng. Ứng dụng của bạn không được giả định bất kỳ đảm bảo tính bảo mật ngoài những điều mà nền tảng Android cung cấp. Cụ thể, không sử dụng quy trình này để hiển thị thông tin nhạy cảm mà bạn thường sẽ không hiển thị trên thiết bị của người dùng.
Để biết hướng dẫn về cách thêm tính năng hỗ trợ cho API Xác nhận bảo vệ của Android, hãy xem Được Android bảo vệ Xác nhận của chúng tôi.
Hộp thoại xác thực sinh trắc học hợp nhất
Trên Android 9, hệ thống này thay mặt họ cung cấp hộp thoại xác thực bằng sinh trắc học ứng dụng của bạn. Chức năng này tạo giao diện và vị trí được chuẩn hoá cho hộp thoại, giúp người dùng tự tin hơn rằng họ đang xác thực một trình kiểm tra thông tin xác thực sinh trắc học đáng tin cậy.
Nếu ứng dụng của bạn sử dụng
FingerprintManager
để hiển thị hộp thoại xác thực bằng vân tay cho người dùng, hãy chuyển sang sử dụng
BiometricPrompt
thay thế. BiometricPrompt
dựa vào hệ thống để hiển thị thông tin xác thực
. Trợ lý cũng thay đổi hành vi để thích ứng với loại sinh trắc học
mà người dùng đã chọn.
Mô-đun bảo mật phần cứng
Các thiết bị được hỗ trợ chạy Android 9 trở lên có thể cài đặt có StrongBox Keymaster, một cách triển khai HAL Keymaster nằm trong mô-đun bảo mật phần cứng. Mô-đun này có các thành phần sau:
- CPU riêng.
- Bộ nhớ bảo mật.
- Một trình tạo số ngẫu nhiên thực sự.
- Các cơ chế bổ sung để chống lại hành vi can thiệp vào gói và cài đặt trái phép không qua cửa hàng ứng dụng ứng dụng.
Khi kiểm tra các khoá được lưu trữ trong StrongBox Keymaster, hệ thống chứng thực một tính toàn vẹn của khoá với Môi trường thực thi đáng tin cậy (TEE).
Để tìm hiểu thêm về cách sử dụng Strongbox Keymaster, hãy xem bài viết Bảo mật phần cứng Phụ lục.
Nhập khoá bảo mật vào Kho khoá
Android 9 cung cấp thêm khả năng bảo mật cho quy trình giải mã khoá bằng cách thêm khả năng nhập các khoá đã mã hoá một cách an toàn vào Kho khoá bằng cách sử dụng Định dạng khoá được mã hoá ASN.1. Sau đó, Keymaster giải mã các khoá trong Kho khoá nên nội dung của các khoá không bao giờ xuất hiện dưới dạng văn bản thuần tuý trong bộ nhớ máy chủ của thiết bị.
Tìm hiểu thêm về cách Nhập khoá đã mã hoá thêm một cách an toàn.
Lược đồ chữ ký APK có tính năng xoay vòng khoá
Android 9 bổ sung tính năng hỗ trợ Lược đồ chữ ký APK v3. Giao thức này có tuỳ chọn để thêm một bản ghi proof-of-rotation vào khối ký cho mỗi lần ký chứng chỉ. Chức năng này cho phép ứng dụng của bạn được ký bằng một tính năng ký mới bằng cách liên kết chứng chỉ ký trước đây của tệp APK với chứng chỉ có bản ghi hiện đã được ký.
Tìm hiểu thêm về cách dùng chìa khoá để xoay
apksigner
.
Tuỳ chọn chỉ cho phép giải mã khoá trên các thiết bị đã mở khoá
Android 9 ra mắt cờ unlockedDeviceRequired
. Lựa chọn này xác định
liệu Kho khoá có yêu cầu mở khoá màn hình trước khi cho phép hay không
giải mã bất kỳ dữ liệu nào đang chuyển hoặc được lưu trữ bằng khoá được chỉ định. Các loại này
khoá rất phù hợp để mã hoá dữ liệu nhạy cảm để lưu trữ trên ổ đĩa, chẳng hạn như
dữ liệu sức khoẻ hoặc dữ liệu doanh nghiệp. Cờ này cung cấp cho người dùng
một sự đảm bảo rõ ràng hơn rằng
không thể giải mã dữ liệu trong khi thiết bị bị khoá nếu điện thoại của họ bị mất
hoặc bị đánh cắp.
Để khoá một khoá không bị giải mã khi thiết bị đang khoá, hãy bật cờ
bằng cách truyền true
đến setUnlockedDeviceRequired()
. Sau khi hoàn tất bước này, khi màn hình của người dùng bị khoá, bất kỳ
việc giải mã hoặc ký dữ liệu bằng khoá này sẽ không thành công. Để thiết bị bị khoá, bạn cần
Mã PIN, mật khẩu, vân tay hoặc một số yếu tố đáng tin cậy khác trước khi có thể được
đã truy cập.
Hỗ trợ công nghệ mã hoá cũ
Các thiết bị Android 9 đi kèm với Keymaster 4 hỗ trợ Dữ liệu gấp ba Thuật toán mã hoá hoặc DES 3 lần. Nếu ứng dụng của bạn tương tác với phiên bản cũ các hệ thống yêu cầu DES ba lần, hãy sử dụng loại thuật toán mật mã này khi mã hoá thông tin xác thực nhạy cảm.
Để tìm hiểu thêm về cách tăng cường bảo mật cho ứng dụng của bạn, hãy xem bài viết Bảo mật cho Android Nhà phát triển.
Ngừng sử dụng WPS
Tính năng Thiết lập được bảo vệ bằng Wi-Fi (WPS) không được dùng nữa vì lý do bảo mật.
Bản sao lưu Android
Android 9 bổ sung chức năng mới và tuỳ chọn cho nhà phát triển liên quan sao lưu và khôi phục. Thông tin chi tiết về những thay đổi này sẽ xuất hiện trong phần sau .
Bản sao lưu được mã hoá phía máy khách
Android 9 hỗ trợ thêm việc mã hoá bản sao lưu Android bằng mã bí mật phía máy khách. Hỗ trợ này được bật tự động khi điều kiện được đáp ứng:
- Người dùng đã bật sao lưu bằng Android 9 trở lên.
- Người dùng đã đặt màn hình khoá thiết bị của họ yêu cầu mã PIN, hình mở khoá hoặc mật khẩu để mở khoá.
Khi biện pháp bảo vệ quyền riêng tư này đang bật, mã PIN, hình mở khoá hoặc mật khẩu của thiết bị sẽ để khôi phục dữ liệu từ các bản sao lưu mà thiết bị của người dùng tạo. Để tìm hiểu để biết thêm về công nghệ đằng sau tính năng này, hãy xem Google Cloud Key Vault Sách trắng về Dịch vụ.
Xác định các điều kiện thiết bị cần có để sao lưu
Nếu dữ liệu ứng dụng của bạn chứa thông tin hoặc lựa chọn ưu tiên nhạy cảm, thì Android 9 cho phép bạn xác định thiết bị mà theo đó, dữ liệu của ứng dụng có trong bản sao lưu của người dùng, chẳng hạn như khi phía máy khách đã bật tính năng mã hoá hoặc một quy trình chuyển dữ liệu từ thiết bị này sang thiết bị khác đang diễn ra.
Để tìm hiểu thêm về cách sao lưu dữ liệu trên thiết bị Android, hãy xem bài viết Dữ liệu Tổng quan về hoạt động sao lưu.
Hỗ trợ tiếp cận
Android 9 giới thiệu các điểm cải tiến về khả năng hỗ trợ tiếp cận giúp dễ dàng cung cấp trải nghiệm tốt hơn nữa cho người dùng ứng dụng của bạn.
Ngữ nghĩa điều hướng
Các thuộc tính được thêm vào Android 9 giúp bạn dễ dàng xác định cách các dịch vụ hỗ trợ tiếp cận, đặc biệt là trình đọc màn hình, điều hướng từ một phần màn hình này sang một màn hình khác. Các thuộc tính này có thể giúp người dùng khiếm thị nhanh chóng di chuyển qua văn bản trong giao diện người dùng của ứng dụng và cho phép họ lựa chọn.
Ví dụ: trong một ứng dụng mua sắm, trình đọc màn hình có thể giúp người dùng thao tác trực tiếp từ danh mục giao dịch này sang danh mục giao dịch tiếp theo mà không cần trình đọc màn hình phải đọc tất cả các mục trong một danh mục trước khi chuyển sang mục tiếp theo.
Tiêu đề của ngăn hỗ trợ tiếp cận
Trong Android 8.1 (API cấp 27) trở xuống, các dịch vụ hỗ trợ tiếp cận không phải lúc nào cũng xác định thời điểm cập nhật một ngăn cụ thể của màn hình, chẳng hạn như khi một hoạt động thay thế một mảnh bằng một mảnh khác. Các ngăn bao gồm các phần tử trên giao diện người dùng có liên quan trực quan, được nhóm hợp lý thường bao gồm một mảnh.
Trong Android 9, bạn có thể cung cấp tiêu đề của ngăn hỗ trợ tiếp cận hoặc riêng lẻ tiêu đề có thể nhận dạng, cho các ngăn này. Nếu một ngăn có tiêu đề của ngăn hỗ trợ tiếp cận, dịch vụ hỗ trợ tiếp cận sẽ nhận được thông tin chi tiết hơn khi ngăn thay đổi. Tính năng này cho phép các dịch vụ cung cấp thông tin chi tiết hơn cho người dùng về những thay đổi trên giao diện người dùng.
Để chỉ định tiêu đề của một ngăn, hãy sử dụng
android:accessibilityPaneTitle
. Bạn cũng có thể cập nhật tiêu đề của ngăn giao diện người dùng được thay thế tại
trong thời gian chạy bằng setAccessibilityPaneTitle()
.
Ví dụ: bạn có thể cung cấp tiêu đề cho vùng nội dung của
Đối tượng Fragment
.
Điều hướng dựa trên tiêu đề
Nếu ứng dụng của bạn hiển thị nội dung văn bản bao gồm tiêu đề logic, hãy đặt giá trị
android:accessibilityHeading
cho true
đối với các phiên bản của
View
đại diện cho các tiêu đề đó. Theo
khi thêm các tiêu đề này, bạn sẽ cho phép các dịch vụ hỗ trợ tiếp cận giúp người dùng điều hướng
trực tiếp từ tiêu đề này sang tiêu đề tiếp theo. Mọi dịch vụ hỗ trợ tiếp cận đều có thể sử dụng tính năng này
có thể giúp người dùng cải thiện Trải nghiệm điều hướng trong giao diện người dùng.
Điều hướng và kết quả của nhóm
Trình đọc màn hình thường sử dụng
Thuộc tính android:focusable
cho
xác định thời điểm các em nên đọc
ViewGroup
hoặc bộ sưu tập
View
đối tượng dưới dạng một đơn vị duy nhất. Bằng cách đó,
người dùng có thể hiểu rằng các lượt xem có liên quan với nhau về mặt logic.
Trong Android 8.1 trở xuống, bạn cần đánh dấu từng đối tượng View
trong một
ViewGroup
là không thể làm tâm điểm và chính ViewGroup
có thể làm tâm điểm. Chiến dịch này
cách sắp xếp khiến một số thực thể của View
được đánh dấu là có thể làm tâm điểm theo cách
khiến việc điều hướng bằng bàn phím trở nên rườm rà hơn.
Kể từ Android 9, bạn có thể sử dụng
android:screenReaderFocusable
thay cho thuộc tính android:focusable
trong các trường hợp
việc đặt một đối tượng View
có thể làm tâm điểm sẽ gây ra những hậu quả không mong muốn. Trình đọc màn hình
đặt tiêu điểm vào tất cả các phần tử đặt android:screenReaderFocusable
hoặc android:focusable
đến true
.
Thao tác thuận tiện
Android 9 thêm tính năng hỗ trợ để thay mặt người dùng thực hiện các thao tác tiện lợi:
- Tương tác với chú thích
- Các tính năng đã thêm vào khung hỗ trợ tiếp cận giúp bạn có quyền truy cập vào
chú thích trong giao diện người dùng của một ứng dụng. Sử dụng
getTooltipText()
để đọc văn bản của chú thích và sử dụngACTION_SHOW_TOOLTIP
vàACTION_HIDE_TOOLTIP
để hướng dẫn các thực thể củaView
hiển thị hoặc hãy ẩn phần chú thích. - Đã thêm thao tác chung
- Android 9 hỗ trợ thêm 2 thao tác trên thiết bị trong
AccessibilityService
. Dịch vụ của bạn có thể giúp người dùng khoá thiết bị và chụp ảnh màn hình sử dụngGLOBAL_ACTION_LOCK_SCREEN
vàGLOBAL_ACTION_TAKE_SCREENSHOT
hành động tương ứng.
Chi tiết về việc thay đổi cửa sổ
Android 9 giúp bạn dễ dàng theo dõi bản cập nhật cho cửa sổ của một ứng dụng khi một ứng dụng
vẽ lại nhiều cửa sổ cùng lúc. Khi một
TYPE_WINDOWS_CHANGED
sự kiện xảy ra, hãy sử dụng
getWindowChanges()
API để xác định cách các cửa sổ đã thay đổi. Trong một lần cập nhật nhiều cửa sổ, mỗi lần
cửa sổ sẽ tạo một nhóm sự kiện riêng.
getSource()
sẽ trả về chế độ xem gốc của cửa sổ liên kết với mỗi sự kiện.
Nếu một ứng dụng đã xác định tiêu đề của ngăn hỗ trợ tiếp cận cho
View
tương ứng với đối tượng mà dịch vụ của bạn có thể nhận dạng
khi giao diện người dùng của ứng dụng được cập nhật. Khi một
TYPE_WINDOW_STATE_CHANGED
xảy ra sự kiện, hãy sử dụng các loại được trả về bởi
getContentChangeTypes()
để xác định cách cửa sổ đã thay đổi. Ví dụ: khung này có thể
phát hiện thời điểm một ngăn có tiêu đề mới hoặc thời điểm một ngăn đã biến mất.
Góc xoay
Để loại bỏ việc xoay ngoài ý muốn, chúng tôi đã thêm một chế độ ghim dòng điện ngay cả khi vị trí của thiết bị thay đổi. Người dùng có thể kích hoạt chế độ xoay theo cách thủ công khi cần bằng cách nhấn một nút trên thanh hệ thống.
Trong hầu hết trường hợp, các ứng dụng chỉ chịu ảnh hưởng rất nhỏ đến khả năng tương thích. Tuy nhiên, nếu ứng dụng có bất kỳ hành vi xoay tuỳ chỉnh nào hoặc sử dụng hướng màn hình bất thường nào bạn có thể gặp phải các vấn đề mà trước đây không để ý, khi tuỳ chọn xoay người dùng luôn được đặt thành dọc. Chúng tôi khuyến khích bạn tham gia bạn có thể xem xét hành vi xoay trong tất cả các hoạt động chính của ứng dụng và đảm bảo rằng tất cả các cài đặt hướng màn hình của bạn vẫn đang cung cấp trải nghiệm tối ưu.
Để biết thêm chi tiết, hãy xem hành vi liên quan thay đổi.
Văn bản
Android 9 cung cấp các tính năng liên quan đến văn bản sau đây cho nền tảng:
Văn bản được tính toán trước: Phần tử Lớp
PrecomputedText
cải thiện hiệu suất hiển thị văn bản bằng cách cho phép bạn tính toán và lưu vào bộ nhớ đệm các thuộc tính bắt buộc thông tin. Thao tác này cũng cho phép ứng dụng của bạn tắt bố cục văn bản luồng chính.Kính lúp: Lớp
Magnifier
là một tiện ích nền tảng cung cấp API phóng to, cho phép trải nghiệm tính năng phóng to trên mọi ứng dụng.Smart Linkify: Android 9 nâng cao Lớp
TextClassifier
, Khai thác công nghệ học máy để xác định một số đối tượng trong văn bản đã chọn và đề xuất hành động. Ví dụ:TextClassifier
có thể cho phép ứng dụng của bạn phát hiện người dùng đã chọn một số điện thoại. Khi đó, ứng dụng của bạn có thể đề xuất người dùng gọi điện bằng số đó. Các tính năng trongTextClassifier
thay thế chức năng của lớpLinkify
.Bố cục văn bản: Một số phương thức và thuộc tính tiện lợi giúp dễ dàng triển khai thiết kế giao diện người dùng của bạn. Để biết thông tin chi tiết, hãy xem tài liệu tham khảo cho
TextView
.
Chuyển đổi tệp DEX trước thời gian ART
Trên các thiết bị chạy Android 9 trở lên, Android Runtime (ART) đã tối ưu hoá thêm Dalvik thực thi cho Dalvik nén (DEX) bằng cách chuyển đổi các tệp DEX trong gói ứng dụng thành biểu diễn thu gọn. Thay đổi này cho phép ứng dụng của bạn khởi động nhanh hơn và tiêu thụ dung lượng ổ đĩa và RAM sẽ giảm.
Điểm cải tiến này đặc biệt mang lại lợi ích cho các thiết bị cấp thấp có ổ đĩa I/O chậm hơn tốc độ.
Theo dõi hệ thống trên thiết bị
Android 9 cho phép bạn ghi lại dấu vết hệ thống từ thiết bị của mình, sau đó chia sẻ báo cáo về các bản ghi này với nhóm phát triển của bạn. Báo cáo này hỗ trợ nhiều định dạng, bao gồm cả HTML.
Bằng cách thu thập các dấu vết này, bạn có thể thu thập được dữ liệu thời gian liên quan đến các quy trình và luồng, cũng như xem các loại thiết bị quan trọng trên toàn cầu các trạng thái.
Để tìm hiểu thêm về công cụ này, hãy xem phần Thực hiện hệ thống trên thiết bị theo dõi.