Android 12 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 dưới đây giúp bạn tìm hiểu về các tính năng cho ứng dụng cũng như làm quen với các API có 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 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 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 của Android 12 đối với ứng dụng nhắm đến Android 12 và tất cả ứng dụng.
Trải nghiệm người dùng
Material You
Android 12 giới thiệu một ngôn ngữ thiết kế mới có tên là Material You, giúp bạn tạo các ứng dụng đẹp mắt và phù hợp hơn. Để đưa tất cả bản cập nhật Material Design 3 mới nhất vào ứng dụng của bạn, hãy dùng thử phiên bản alpha của Thành phần Material Design.
Cải tiến tiện ích
Android 12 cải tiến Widgets API hiện có để cải thiện trải nghiệm của người dùng và nhà phát triển trong nền tảng cũng như trình chạy. Chúng tôi đã tạo một hướng dẫn để giúp bạn đảm bảo tiện ích của mình tương thích với Android 12 và làm mới tiện ích đó bằng các tính năng mới.
Xem bài viết Các điểm cải tiến về tiện ích trên Android 12 để biết thêm thông tin.
Chèn nội dung đa dạng thức
Android 12 giới thiệu một API hợp nhất mới cho phép ứng dụng của bạn nhận nội dung đa dạng thức từ mọi nguồn có sẵn: bảng nhớ tạm, bàn phím hoặc thao tác kéo và thả.
Để biết thêm thông tin, hãy xem phần Nhận nội dung đa dạng thức.
API màn hình chờ của ứng dụng
Android 12 giới thiệu một ảnh động mới khi khởi chạy ứng dụng cho tất cả ứng dụng, bao gồm chuyển động trong ứng dụng từ thời điểm khởi chạy, màn hình chờ hiển thị biểu tượng ứng dụng và hiệu ứng chuyển đổi sang chính ứng dụng đó. Hãy xem hướng dẫn cho nhà phát triển màn hình chờ để biết thêm chi tiết.
API góc bo tròn
Android 12 ra mắt RoundedCorner
và WindowInsets.getRoundedCorner(int
position)
, cung cấp bán kính và điểm tâm cho các góc bo tròn.
Để biết thêm thông tin, hãy xem phần Góc bo tròn.
Trải nghiệm xúc giác phong phú
Android 12 mở rộng các công cụ để tạo phản hồi xúc giác cung cấp thông tin cho các sự kiện trên giao diện người dùng, các hiệu ứng sống động và thú vị khi chơi trò chơi cũng như hiệu ứng xúc giác chú ý giúp tăng năng suất.
Hiệu ứng của bộ truyền động
Android 12 thêm các hiệu ứng biểu cảm như kim đánh dấu nhịp độ khung hình để tận dụng băng thông tần số rộng hơn của các bộ truyền động mới nhất. Giờ đây, các nhà phát triển trò chơi có thể truy cập vào nhiều bộ truyền động một cách độc lập trong tay điều khiển trò chơi để mang lại cùng một hiệu ứng một cách đồng bộ hoặc các hiệu ứng xúc giác khác nhau trên nhiều bộ truyền động. Đối với các nhà phát triển, bạn nên sử dụng hằng số và dữ liệu gốc làm khối xây dựng cho các hiệu ứng xúc giác phong phú – hằng số để cải thiện sự kiện trên giao diện người dùng và trình soạn thảo xúc giác để sắp xếp trình tự các dữ liệu gốc nhằm tạo ra các hiệu ứng phức tạp hơn. Các API này hiện có thể dùng thử trên thiết bị Pixel 4, và chúng tôi vẫn đang tiếp tục hợp tác với các đối tác sản xuất thiết bị nhằm mang đến tính năng hỗ trợ xúc giác mới nhất cho người dùng trên toàn hệ sinh thái.
Hiệu ứng xúc giác kết hợp âm thanh
Các ứng dụng Android 12 có thể tạo ra phản hồi xúc giác thu được từ một phiên âm thanh bằng cách sử dụng bộ rung của điện thoại. Điều này mang đến cơ hội mang đến trải nghiệm âm thanh và trò chơi sống động hơn. Ví dụ: nhạc chuông nâng cao xúc giác có thể giúp xác định người gọi hoặc trò chơi lái xe có thể mô phỏng cảm giác địa hình thô ráp.
Hãy xem tài liệu tham khảo về HapticGenerator
để biết thêm thông tin.
AppSearch
Android 12 ra mắt AppSearch, một công cụ tìm kiếm hiệu suất cao trên thiết bị, dưới dạng một dịch vụ hệ thống. AppSearch cho phép các ứng dụng lập chỉ mục dữ liệu có cấu trúc và tìm kiếm dữ liệu đó bằng chức năng tìm kiếm toàn bộ văn bản tích hợp sẵn. Hơn nữa, AppSearch hỗ trợ các tính năng tìm kiếm gốc, như lập chỉ mục và truy xuất hiệu quả cao, hỗ trợ đa ngôn ngữ và xếp hạng mức độ liên quan.
![Sơ đồ minh hoạ hoạt động lập chỉ mục và tìm kiếm trong AppSearch](https://developer.android.google.cn/static/images/about/versions/12/appsearch.png?authuser=6&hl=vi)
AppSearch có 2 phiên bản: chỉ mục cục bộ để ứng dụng của bạn sử dụng tương thích với các phiên bản Android cũ hơn, hoặc chỉ mục trung tâm được duy trì cho toàn bộ hệ thống trong Android 12. Khi sử dụng chỉ mục trung tâm, ứng dụng của bạn có thể cho phép dữ liệu của mình được hiển thị trên nền tảng giao diện người dùng hệ thống bằng thành phần thông minh được cài đặt sẵn của hệ thống. Việc dữ liệu được hiển thị chính xác trên các nền tảng giao diện người dùng của hệ thống là phụ thuộc vào OEM. Ngoài ra, ứng dụng của bạn có thể chia sẻ dữ liệu một cách an toàn với các ứng dụng khác, cũng như cho phép các ứng dụng đó tìm kiếm trên dữ liệu đó.
Tìm hiểu thêm về AppSearch trong hướng dẫn cho nhà phát triển và bắt đầu sử dụng ứng dụng này với thư viện Jetpack AppSearch. Thư viện này cung cấp một nền tảng API thân thiện với nhà phát triển cũng như hỗ trợ trình xử lý chú giải.
Chế độ trò chơi
Game Mode API và các biện pháp can thiệp của Chế độ trò chơi cho phép bạn tối ưu hoá lối chơi bằng cách sắp xếp mức độ ưu tiên cho các đặc điểm, chẳng hạn như hiệu suất hoặc thời lượng pin dựa trên chế độ cài đặt của người dùng hoặc các cấu hình dành riêng cho trò chơi.
Để biết thêm thông tin, hãy xem phần Chế độ trò chơi.
Các đề xuất và điểm cải tiến đối với tính năng Hình trong hình (PiP)
Android 12 ra mắt các điểm cải tiến sau đây cho chế độ Hình trong hình:
Hỗ trợ các cử chỉ PiP mới
Android 12 hiện hỗ trợ các cử chỉ giữ lại và chụm để thu phóng cho cửa sổ PiP:
Để lưu trữ cửa sổ đó, người dùng có thể kéo cửa sổ đó sang cạnh trái hoặc phải. Để huỷ lưu trữ cửa sổ, người dùng có thể nhấn vào phần hiển thị của cửa sổ đã lưu trữ hoặc kéo phần đó ra.
Giờ đây, người dùng có thể đổi kích thước cửa sổ PiP bằng cách chụm để thu phóng.
Các tính năng mới nên dùng để hỗ trợ trải nghiệm chuyển đổi hình trong hình chỉn chu
Android 12 bổ sung những cải tiến đáng kể về mặt thẩm mỹ vào các hiệu ứng chuyển đổi ảnh động giữa cửa sổ toàn màn hình và cửa sổ PiP. Bạn nên triển khai mọi thay đổi có thể áp dụng. Sau khi bạn thực hiện, những thay đổi này sẽ tự động mở rộng quy mô sang màn hình lớn, chẳng hạn như thiết bị có thể gập lại và máy tính bảng mà không cần phải làm gì thêm.
Các tính năng này bao gồm:
-
Sử dụng cờ
setAutoEnterEnabled
để chuyển đổi mượt mà hơn sang chế độ Hình trong hình khi vuốt lên màn hình chính trong chế độ thao tác bằng cử chỉ. Trước đây, Android chờ ảnh động vuốt lên màn hình chính kết thúc trước khi làm mờ trong cửa sổ PiP. Ảnh động mượt mà hơn khi vào và thoát khỏi chế độ PiP
Giờ đây, cờ
SourceRectHint
được sử dụng lại để triển khai ảnh động mượt mà hơn khi vào và thoát chế độ PiP.Cờ API mới để tắt tính năng đổi kích thước liền mạch cho nội dung không phải video
Cờ
SeamlessResizeEnabled
cung cấp ảnh động mờ dần trên nhiều màn hình khi đổi kích thước nội dung không phải video trong cửa sổ Hình trong hình. Trước đây, việc đổi kích thước nội dung không phải video trong cửa sổ PiP có thể tạo ra các thành phần hình ảnh khó hiểu.
Thông báo cuộc gọi điện thoại mới cho phép xếp hạng mức độ quan trọng của cuộc gọi đến
Android 12 thêm kiểu thông báo mới Notification.CallStyle
cho các cuộc gọi điện thoại. Việc sử dụng mẫu này cho phép ứng dụng của bạn cho biết tầm quan trọng của các lệnh gọi đang hoạt động bằng cách hiển thị một khối nổi bật cho biết thời gian của cuộc gọi trên thanh trạng thái; người dùng có thể nhấn vào khối này để quay lại cuộc gọi.
Vì các cuộc gọi đến và đang diễn ra là quan trọng nhất đối với người dùng, nên những thông báo này sẽ được xếp hạng cao nhất trong nhóm. Thứ hạng này cũng cho phép hệ thống có thể chuyển tiếp các lệnh gọi được ưu tiên này đến các thiết bị khác.
Triển khai mã sau cho tất cả các loại lệnh gọi.
Kotlin
// Create a new call with the user as caller. val incoming_caller = Person.Builder() .setName("Jane Doe") .setImportant(true) .build()
Java
// Create a new call with the user as caller. Person incoming_caller = new Person.Builder() .setName("Jane Doe") .setImportant(true) .build();
Sử dụng forIncomingCall()
để tạo thông báo kiểu cuộc gọi cho cuộc gọi đến.
Kotlin
// Create a call style notification for an incoming call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)) .addPerson(incoming_caller)
Java
// Create a call style notification for an incoming call. Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)) .addPerson(incoming_caller);
Sử dụng forOngoingCall()
để tạo thông báo kiểu cuộc gọi cho cuộc gọi đang diễn ra.
Kotlin
// Create a call style notification for an ongoing call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forOnGoingCall(caller, hangupIntent)) .addPerson(second_caller)
Java
// Create a call style notification for an ongoing call. Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forOnGoingCall(caller, hangupIntent)) .addPerson(second_caller);
Sử dụng forScreeningCall()
để tạo thông báo kiểu cuộc gọi nhằm sàng lọc cuộc gọi.
Kotlin
// Create a call style notification for screening a call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent)) .addPerson(second_caller)
Java
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent)) .addPerson(second_caller);
Hỗ trợ hình ảnh phong phú cho thông báo
Trên Android 12, giờ đây, bạn có thể làm phong phú thêm trải nghiệm thông báo của ứng dụng bằng cách cung cấp ảnh động trong thông báo MessagingStyle()
và BigPictureStyle()
. Ngoài ra, ứng dụng của bạn giờ đây có thể cho phép người dùng gửi tin nhắn hình ảnh khi họ trả lời tin nhắn trong ngăn thông báo.
Các điểm cải tiến về chế độ sống động cho thao tác bằng cử chỉ
Android 12 hợp nhất hành vi hiện có để giúp người dùng dễ dàng thực hiện các lệnh thao tác bằng cử chỉ khi ở chế độ hiển thị tối đa. Ngoài ra, Android 12 cung cấp hành vi tương thích ngược cho chế độ chìm cố định.
Chia sẻ URL Gần đây (chỉ trên Pixel)
Trên các thiết bị Pixel, giờ đây, người dùng có thể chia sẻ đường liên kết đến nội dung web đã xem gần đây ngay trên màn hình Gần đây. Sau khi truy cập nội dung trong một ứng dụng, người dùng có thể vuốt đến màn hình Gần đây để tìm ứng dụng mà họ đã xem nội dung, sau đó nhấn vào nút đường liên kết để sao chép hoặc chia sẻ URL.
Để biết thêm thông tin, hãy xem bài viết Bật tính năng chia sẻ URL gần đây.
Mức độ bảo mật và quyền riêng tư
Bảng tổng quan về quyền riêng tư
Trên các thiết bị được hỗ trợ chạy Android 12 trở lên, màn hình Bảng tổng quan về quyền riêng tư sẽ xuất hiện trong phần cài đặt hệ thống. Trên màn hình này, người dùng có thể truy cập vào những màn hình riêng biệt xuất hiện khi các ứng dụng truy cập vào thông tin vị trí, máy ảnh và micrô. Mỗi màn hình hiển thị một dòng thời gian cho biết thời điểm các ứng dụng truy cập vào loại dữ liệu cụ thể. Hình 1 cho thấy dòng thời gian truy cập dữ liệu đối với thông tin vị trí.
Ứng dụng của bạn có thể đưa ra lý do cho người dùng để giúp họ hiểu lý do ứng dụng truy cập vào thông tin vị trí, camera hoặc micrô. Lý do này có thể xuất hiện trên màn hình mới của Bảng tổng quan về quyền riêng tư, màn hình quyền của ứng dụng hoặc cả hai.
Quyền truy cập Bluetooth
Android 12 giới thiệu các quyền BLUETOOTH_SCAN
, BLUETOOTH_ADVERTISE
và BLUETOOTH_CONNECT
. Các quyền này giúp các ứng dụng nhắm đến Android 12 tương tác với thiết bị Bluetooth dễ dàng hơn, đặc biệt là đối với các ứng dụng không yêu cầu quyền truy cập vào thông tin vị trí của thiết bị.
Cập nhật phần khai báo quyền Bluetooth của ứng dụng
Để chuẩn bị thiết bị nhắm đến Android 12 trở lên, hãy cập nhật logic của ứng dụng. Thay vì khai báo một nhóm quyền Bluetooth cũ, hãy khai báo nhóm quyền Bluetooth hiện đại hơn.
Tra cứu nhóm quyền
Trên Android 12 trở lên, bạn có thể truy vấn cách hệ thống sắp xếp các quyền do nền tảng cung cấp vào các nhóm quyền:
- Để xác định nhóm quyền mà hệ thống đã đặt một quyền do nền tảng xác định, hãy gọi
getGroupOfPlatformPermission()
. - Để xác định các quyền do nền tảng xác định mà hệ thống đã đặt vào một nhóm quyền cụ thể, hãy gọi
getPlatformPermissionsForGroup()
.
Ẩn cửa sổ lớp phủ ứng dụng
Để giúp nhà phát triển có thêm quyền kiểm soát đối với nội dung mà người dùng nhìn thấy khi tương tác với ứng dụng của nhà phát triển, Android 12 ra mắt tính năng ẩn cửa sổ lớp phủ do các ứng dụng có quyền SYSTEM_ALERT_WINDOW
vẽ.
Sau khi khai báo quyền HIDE_OVERLAY_WINDOWS
, ứng dụng có thể gọi setHideOverlayWindows()
để cho biết rằng tất cả cửa sổ thuộc loại TYPE_APPLICATION_OVERLAY
sẽ bị ẩn khi cửa sổ riêng của ứng dụng hiển thị. Các ứng dụng có thể chọn cách làm này khi hiển thị màn hình nhạy cảm, chẳng hạn như quy trình xác nhận giao dịch.
Các ứng dụng hiển thị cửa sổ thuộc loại TYPE_APPLICATION_OVERLAY
nên cân nhắc các lựa chọn thay thế có thể phù hợp hơn với trường hợp sử dụng, chẳng hạn như hình trong hình hoặc bong bóng trò chuyện.
Cờ bảo vệ quyền của người ký đã biết
Kể từ Android 12, thuộc tính knownCerts
đối với các quyền ở cấp chữ ký cho phép bạn tham khảo thông báo của các chứng chỉ ký đã biết tại thời điểm khai báo.
Ứng dụng của bạn có thể khai báo thuộc tính này và sử dụng cờ knownSigner
để cho phép các thiết bị và ứng dụng cấp quyền chữ ký cho các ứng dụng khác mà không cần phải ký ứng dụng tại thời điểm sản xuất và vận chuyển thiết bị.
Chứng thực thuộc tính thiết bị
Android 12 mở rộng một tập hợp các ứng dụng có thể xác minh các thuộc tính thiết bị có trong chứng chỉ chứng thực khi các ứng dụng này tạo khoá mới.
Kể từ Android 9 (API cấp 28), chủ sở hữu chính sách thiết bị (DPO) sử dụng Keymaster 4.0 trở lên có thể xác minh các thuộc tính của thiết bị trong các chứng chỉ chứng thực này. Kể từ Android 12, mọi ứng dụng nhắm đến Android 12 (API cấp 31) trở lên đều có thể thực hiện quy trình xác minh này bằng phương thức setDevicePropertiesAttestationIncluded()
.
Các thuộc tính thiết bị được tạo bao gồm các trường Build
sau:
BRAND
DEVICE
MANUFACTURER
MODEL
PRODUCT
Thao tác đối với thông báo trên màn hình khoá bảo mật
Kể từ Android 12, lớp Notification.Action.Builder
sẽ hỗ trợ phương thức setAuthenticationRequired()
, cho phép ứng dụng của bạn yêu cầu mở khoá một thiết bị trước khi ứng dụng gọi một hành động thông báo cụ thể. Phương thức này giúp thêm một lớp bảo mật bổ sung cho thông báo trên các thiết bị bị khoá.
Các chuỗi có thể bản địa hoá cho BiometricPrompt
Android 12 giới thiệu các API mới để giúp bạn cải thiện trải nghiệm người dùng xác thực bằng sinh trắc học của ứng dụng. Lớp lồng ghép BiometricManager.Strings
mới bao gồm các phương thức getButtonLabel()
, getPromptMessage()
và getSettingName()
cho phép ứng dụng truy xuất nhãn nút đã bản địa hoá và có thể đọc được cho người dùng, thông báo nhắc hoặc tên chế độ cài đặt ứng dụng. Hãy sử dụng các nhãn này để tạo hướng dẫn chính xác hơn dành cho người dùng, dành riêng cho các phương thức xác thực bằng sinh trắc học được sử dụng, chẳng hạn như "Dùng tính năng mở khoá bằng khuôn mặt" hoặc "Dùng vân tay để tiếp tục".
Phát hiện hành vi lừa đảo trong ứng dụng nhắn tin (chỉ dành cho Pixel)
![](https://developer.android.google.cn/static/images/about/versions/12/phishing-detection.png?authuser=6&hl=vi)
Trên các thiết bị Pixel được hỗ trợ, Android 12 sẽ chạy tính năng phát hiện hành vi lừa đảo đối với các tin nhắn nhận được trong các ứng dụng nhắn tin phổ biến. Hệ thống này sử dụng công nghệ học máy trên thiết bị để phát hiện các hoạt động đáng ngờ. Khi bị phát hiện, hệ thống sẽ hiện một lớp phủ an toàn ở đầu giao diện người dùng của ứng dụng nhắn tin để cảnh báo cho người dùng. Ví dụ: tính năng phát hiện hành vi tấn công giả mạo có thể cảnh báo người dùng về những rủi ro tiềm ẩn sau đây:
- Các yêu cầu đáng ngờ, chẳng hạn như gửi mã, tiền hoặc các yêu cầu tương tự
- URL không đáng tin cậy
- Tệp đính kèm độc hại
- Đường liên kết đến các ứng dụng độc hại
Ngoài việc cảnh báo người dùng, lớp phủ này còn cho phép người dùng báo cáo một thông báo đáng ngờ và đưa ra ý kiến phản hồi về các cảnh báo do hệ thống đưa ra.
Nhà phát triển có thể chọn không sử dụng tính năng này bằng cách thêm một thẻ siêu dữ liệu mới, bao gồm cả chuỗi com.google.android.ALLOW_PHISHING_DETECTION
trong tệp kê khai ứng dụng. Ví dụ:
<manifest>
<application android:name="com.messagingapp">
<meta-data android:name="com.google.android.ALLOW_PHISHING_DETECTION" android:value="false" />
</application>
</manifest>
Nội dung nghe nhìn
Chuyển mã tệp đa phương tiện tương thích
Kể từ Android 12 (API cấp 31), hệ thống có thể tự động chuyển mã video HEVC(H.265) và HDR (HDR10 và HDR10+) quay video trên thiết bị thành AVC (H.264), một định dạng tương thích rộng rãi với trình phát tiêu chuẩn. Điều này tận dụng các bộ mã hoá và giải mã hiện đại khi có sẵn mà không làm giảm khả năng tương thích với các ứng dụng cũ.
Hãy xem bài viết chuyển mã nội dung nghe nhìn tương thích để biết thêm chi tiết.
Lớp hiệu suất
Android 12 ra mắt một tiêu chuẩn có tên là lớp hiệu suất. Lớp hiệu suất chỉ định các khả năng phần cứng nằm ngoài các yêu cầu cơ sở của Android. Mỗi thiết bị Android đều khai báo lớp hiệu suất mà thiết bị hỗ trợ. Nhà phát triển có thể kiểm tra lớp hiệu suất của thiết bị trong thời gian chạy, đồng thời cung cấp trải nghiệm nâng cấp để khai thác tối đa các tính năng của thiết bị.
Hãy xem bài viết Lớp hiệu suất để biết thêm thông tin chi tiết.
Cải thiện phương thức mã hoá video
Android 12 xác định một bộ khoá tiêu chuẩn để kiểm soát giá trị tham số lượng tử hoá (QP) cho quá trình mã hoá video, cho phép nhà phát triển tránh được mã dành riêng cho nhà cung cấp.
Các khoá mới có trong API MediaFormat
cũng như trong thư viện Nội dung đa phương tiện NDK.
Kể từ Android 12, các bộ mã hoá video sẽ thực thi ngưỡng chất lượng tối thiểu. Điều này đảm bảo rằng người dùng không trải nghiệm chất lượng quá thấp khi mã hoá những video có độ phức tạp cao của cảnh.
Quyền phát âm thanh
Kể từ Android 12 (API cấp 31), khi một ứng dụng yêu cầu quyền phát âm thanh trong khi một ứng dụng khác có quyền phát âm thanh và đang phát, hệ thống sẽ làm mờ ứng dụng đang phát.
Hãy xem bài viết Quyền phát âm thanh trong Android 12 trở lên để biết thêm thông tin chi tiết.
Thông tin cập nhật về MediaDrm
Để xác định xem có cần thành phần bộ giải mã bảo mật với các API MediaDrm
hiện tại hay không, bạn phải làm theo các bước sau:
- Tạo
MediaDrm
. - Mở một phiên để lấy mã phiên.
- Tạo
MediaCrypto
bằng cách sử dụng mã phiên hoạt động. - Gọi
MediaCrypto.requiresSecureDecoderComponent(mimeType)
.
Với các phương thức mới requiresSecureDecoder(@NonNull String mime)
và requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level)
, bạn có thể xác định điều này ngay khi tạo MediaDrm
.
Camera
Tiện ích của nhà cung cấp Camera2
Nhiều đối tác nhà sản xuất thiết bị của chúng tôi đã tạo các tiện ích máy ảnh tuỳ chỉnh (chẳng hạn như Bokeh, HDR, Chế độ ban đêm và các tiện ích khác) mà họ muốn các ứng dụng sử dụng để tạo ra trải nghiệm riêng biệt trên thiết bị của họ. Thư viện CameraX đã hỗ trợ các tiện ích tuỳ chỉnh này của nhà cung cấp. Trong Android 12, các tiện ích của nhà cung cấp này hiện đã hiển thị trực tiếp trong nền tảng.
Việc bổ sung này giúp các ứng dụng có cách triển khai Camera2
phức tạp tận dụng các tiện ích của nhà cung cấp mà không phải thực hiện những thay đổi đáng kể đối với mã cũ. Các API mở rộng Camera2 hiển thị chính xác cùng một bộ tiện ích như trong CameraX, đồng thời các API đó đã được hỗ trợ trên nhiều thiết bị, vì vậy, bạn có thể sử dụng các tiện ích đó mà không cần bất kỳ cấu hình bổ sung nào.
Để biết thêm thông tin, hãy xem CameraExtensionCharacteristics
.
Hỗ trợ cảm biến máy ảnh 4 cạnh
Ngày nay, nhiều thiết bị Android có sẵn cảm biến máy ảnh có độ phân giải siêu cao, thường có mẫu Quad hoặc Nona Bayer. Những thiết bị này có tính linh hoạt cao về chất lượng hình ảnh cũng như hiệu suất trong điều kiện ánh sáng yếu. Android 12 giới thiệu các API nền tảng mới cho phép các ứng dụng bên thứ ba khai thác tối đa các cảm biến linh hoạt này. Các API mới hỗ trợ hành vi riêng biệt của các cảm biến này, đồng thời xét đến việc các API này có thể hỗ trợ nhiều cấu hình và tổ hợp luồng khi hoạt động ở độ phân giải đầy đủ hoặc chế độ "độ phân giải tối đa" so với chế độ "mặc định".
Đồ hoạ và hình ảnh
Cho phép ứng dụng truy cập trực tiếp vào dấu vết tombstone
Kể từ Android 12, bạn có thể truy cập vào tombstone về trục trặc mã gốc của ứng dụng dưới dạng một bộ đệm giao thức thông qua phương thức ApplicationExitInfo.getTraceInputStream()
. Vùng đệm giao thức này được tuần tự hoá bằng cách sử dụng lược đồ này.
Trước đây, cách duy nhất để truy cập vào thông tin này là thông qua Cầu gỡ lỗi Android (Android Debug Bridge – adb).
Để biết thêm thông tin, hãy xem phần Cung cấp cho ứng dụng quyền truy cập trực tiếp vào dấu vết tombstone
Hỗ trợ hình ảnh AVIF
Android 12 hỗ trợ những hình ảnh sử dụng Định dạng tệp hình ảnh AV1 (AVIF). AVIF là một định dạng vùng chứa dành cho hình ảnh và trình tự của hình ảnh được mã hoá bằng AV1. AVIF tận dụng nội dung được mã hoá trong khung hình từ tính năng nén video. Điều này giúp cải thiện đáng kể chất lượng ảnh cho cùng một kích thước tệp so với các định dạng hình ảnh cũ, chẳng hạn như JPEG. Để hiểu sâu hơn về ưu điểm của định dạng này, hãy xem bài đăng trên blog của Jake Archibald.
Làm mờ, bộ lọc màu và các hiệu ứng khác dễ dàng hơn
Android 12 thêm RenderEffect
mới áp dụng các hiệu ứng đồ hoạ phổ biến như làm mờ, bộ lọc màu, hiệu ứng đổ bóng của Android, v.v. cho View
và hệ phân cấp kết xuất. Bạn có thể kết hợp các hiệu ứng ở dạng hiệu ứng chuỗi (kết hợp hiệu ứng bên trong và bên ngoài) hoặc hiệu ứng kết hợp. Nhiều thiết bị Android có thể hỗ trợ hoặc không hỗ trợ tính năng này do khả năng xử lý hạn chế.
Bạn cũng có thể áp dụng các hiệu ứng cho RenderNode
cơ bản của các View
bằng cách gọi View.setRenderEffect(RenderEffect)
.
Cách triển khai RenderEffect
:
view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))
Giải mã hình ảnh động gốc
Trong Android 12, API ImageDecoder
của NDK đã được mở rộng để giải mã tất cả dữ liệu khung và thời gian từ những hình ảnh sử dụng định dạng tệp GIF động và định dạng tệp WebP động. Khi được giới thiệu trong Android 11, API này chỉ giải mã hình ảnh đầu tiên từ các ảnh động ở các định dạng này.
Hãy sử dụng ImageDecoder
thay vì thư viện của bên thứ ba để giảm kích thước tệp APK và hưởng lợi nhờ các bản cập nhật sau này liên quan đến tính bảo mật và hiệu suất.
Để biết thêm thông tin chi tiết về API này, hãy tham khảo tài liệu tham khảo API và mẫu trên GitHub.
Khả năng kết nối
Luôn bật các ứng dụng đồng hành
Để hỗ trợ nhu cầu tiếp tục chạy các ứng dụng đồng hành nhằm quản lý thiết bị, Android 12 ra mắt các API để thực hiện những việc sau:
- Cho phép bạn đánh thức ứng dụng khi thiết bị đồng hành nằm trong phạm vi.
- Hãy đảm bảo rằng quá trình này sẽ tiếp tục chạy trong khi thiết bị vẫn nằm trong phạm vi.
Để sử dụng các API này, thiết bị của bạn phải được kết nối bằng Trình quản lý thiết bị đồng hành. Để biết thêm thông tin, hãy xem CompanionDeviceManager.startObservingDevicePresence()
và CompanionDeviceService.onDeviceAppeared()
.
Hồ sơ Trình quản lý thiết bị đồng hành
![](https://developer.android.google.cn/static/images/about/versions/12/companion-device-profile.png?authuser=6&hl=vi)
Các ứng dụng của đối tác trên Android 12 (API cấp độ 31) trở lên có thể sử dụng hồ sơ của thiết bị đồng hành đồng hành khi kết nối với đồng hồ. Việc sử dụng hồ sơ giúp đơn giản hoá quá trình đăng ký bằng cách nhóm việc cấp một nhóm quyền theo loại thiết bị cụ thể trong một bước.
Các quyền đi kèm sẽ được cấp cho ứng dụng đồng hành sau khi thiết bị kết nối và chỉ có hiệu lực khi thiết bị được liên kết. Việc xoá ứng dụng hoặc xoá các liên kết cũng là xoá các quyền.
Để biết thêm thông tin, hãy xem AssociationRequest.Builder.setDeviceProfile()
.
Cải thiện ước tính băng thông
Trong Android 12, khả năng ước tính băng thông do getLinkDownstreamBandwidthKbps()
và getLinkUpstreamBandwidthKbps()
cung cấp cho cả kết nối di động và Wi-Fi. Giờ đây, các giá trị được trả về thể hiện thông lượng trung bình tính theo trọng số từ trước đến nay của người dùng trên mỗi nhà mạng hoặc SSID Wi-Fi, loại mạng và mức tín hiệu, trên tất cả các ứng dụng trên thiết bị.
Tính năng này có thể trả về thông tin ước tính thực tế và chính xác hơn về công suất dự kiến, cung cấp thông tin ước tính về thời điểm khởi động nguội ứng dụng và yêu cầu ít chu kỳ hơn so với việc sử dụng các phương pháp ước tính công suất khác.
Các tính năng nâng cao đối với tính năng Nhận biết Wi-Fi (NAN)
Android 12 bổ sung một số tính năng nâng cao cho tính năng Nhận biết Wi-Fi:
- Trên các thiết bị chạy Android 12 (API cấp 31) trở lên, bạn có thể sử dụng lệnh gọi lại
onServiceLost()
để nhận thông báo khi ứng dụng của bạn bị mất một dịch vụ được tìm thấy do dịch vụ dừng hoặc di chuyển ra khỏi phạm vi. - Cách thiết lập nhiều đường dẫn dữ liệu (Đường dẫn dữ liệu NAN) sẽ thay đổi để hiệu quả hơn. Các phiên bản trước đó sử dụng thông báo L2 để trao đổi thông tin ngang hàng của trình khởi tạo, điều này gây ra độ trễ. Trên các thiết bị chạy Android 12 trở lên, trình phản hồi (máy chủ) có thể được định cấu hình để chấp nhận mọi ứng dụng ngang hàng – tức là không cần biết trước thông tin về trình khởi tạo. Việc này giúp tăng tốc việc xử lý đường dẫn dữ liệu và cho phép nhiều đường liên kết từ điểm này đến điểm khác chỉ bằng một yêu cầu mạng.
- Để ngăn khung từ chối các yêu cầu khám phá hoặc kết nối do hết tài nguyên, trên các thiết bị chạy Android 12 trở lên, bạn có thể gọi
WifiAwareManager.getAvailableAwareResources()
. Giá trị trả về của phương thức này cho phép bạn nhận được số lượng đường dẫn dữ liệu có sẵn, số phiên phát hành có sẵn và số phiên đăng ký hiện có.
Kết nối Internet và ngang hàng đồng thời
Khi thiết bị nhắm đến Android 12 (API cấp 31) trở lên chạy trên các thiết bị có hỗ trợ phần cứng, thì việc sử dụng kết nối ngang hàng sẽ không ngắt kết nối Wi-Fi hiện có khi tạo kết nối với thiết bị ngang hàng. Để kiểm tra xem tính năng này có hỗ trợ hay không, hãy sử dụng WifiManager.isMultiStaConcurrencySupported()
.
Bật tính năng tắt màn hình khi thanh toán qua NFC
Trong các ứng dụng nhắm đến Android 12 trở lên, bạn có thể bật tính năng thanh toán NFC mà không cần bật màn hình thiết bị bằng cách đặt requireDeviceScreenOn
thành false
. Để biết thêm thông tin về việc thanh toán qua NFC khi màn hình đang tắt hoặc khoá, hãy xem bài viết Hành vi tắt màn hình và khoá màn hình.
Lưu trữ
Android 12 ra mắt các tính năng quản lý bộ nhớ sau đây:
- Hỗ trợ kho nội dung nghe nhìn cho
MediaDocumentsProvider
khi ứng dụng của bạn truy xuất URI nội dung nghe nhìn tương đương với URI nhất định của nhà cung cấp tài liệu. - Thư mục dành cho bản ghi âm giọng nói.
- Quyền
MANAGE_MEDIA
, cho phép ứng dụng thực hiện các thao tác quản lý nội dung nghe nhìn mà không cần hiển thị hộp thoại xác nhận cho người dùng đối với mỗi thao tác. - Các ứng dụng có cả quyền
MANAGE_EXTERNAL_STORAGE
và quyềnQUERY_ALL_PACKAGES
(chẳng hạn như các ứng dụng quản lý tệp) có thể gọi một hoạt động tuỳ chỉnh để quản lý không gian lưu trữ của một ứng dụng khác, miễn là ứng dụng đó tạo hoạt động tuỳ chỉnh.
Chức năng cốt lõi
Tự động cập nhật ứng dụng
Android 12 giới thiệu phương thức setRequireUserAction()
cho các ứng dụng dùng API PackageInstaller
.
Phương thức này cho phép các ứng dụng cài đặt thực hiện cập nhật ứng dụng mà không yêu cầu người dùng xác nhận thao tác.
Thông tin về bộ vi mạch của thiết bị
Android 12 thêm 2 hằng số vào android.os.Build
để hiển thị thông tin về mô hình và nhà cung cấp bộ vi mạch SoC thông qua SDK. Bạn có thể truy xuất thông tin này bằng cách gọi Build.SOC_MANUFACTURER
và Build.SOC_MODEL
tương ứng.
Các bản cập nhật cho các API Java cốt lõi
Dựa trên các yêu cầu và sự cộng tác với các nhà phát triển, chúng tôi đã thêm các thư viện chính sau đây vào Android 12:
Lớp | API |
---|---|
java.lang.Deprecated
|
|
java.lang.Byte
|
|
java.lang.Short
|
|
java.lang.Math
|
|
java.lang.StrictMath
|
|
java.util.Set
|
copyOf()
|
java.util.Map
|
copyOf()
|
java.util.List
|
copyOf()
|
java.time.Duration
|
|
java.time.LocalTime
|