Android 8.0 (API cấp 26) giới thiệu nhiều tính năng các tính năng và chức năng mớ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.
Đừng quên thanh toán Các thay đổi về hành vi của Android 8.0 để tìm hiểu về những khía cạnh mà nền tảng thay đổi có thể ảnh hưởng đến ứng dụng của bạn.
Trải nghiệm người dùng
Chế độ Hình trong hình
Android 8.0 (API cấp 26) cho phép khởi chạy các hoạt động trong chế độ hình trong hình (PIP). PIP là loại đặc biệt của chế độ nhiều cửa sổ chủ yếu được dùng để phát lại video. Chế độ PIP ban đầu chỉ dành cho Chỉ dành cho Android TV; Android 8.0 cung cấp tính năng này trên các thiết bị Android khác.
Khi ở chế độ PIP, một hoạt động sẽ ở trạng thái tạm dừng, nhưng sẽ
tiếp tục hiển thị nội dung. Vì lý do này, bạn nên đảm bảo rằng ứng dụng của mình
không tạm dừng phát trong onPause()
trình xử lý. Thay vào đó, bạn nên tạm dừng video trong onStop()
và tiếp tục phát sau onStart()
. Để biết thêm thông tin, hãy xem
Nhiều cửa sổ
Vòng đời.
Để chỉ định rằng hoạt động của bạn có thể sử dụng chế độ PIP, hãy đặt
android:supportsPictureInPicture
thành true trong tệp kê khai.
(Bắt đầu từ Android 8.0, PIP không yêu cầu
Thuộc tính tệp kê khai android:resizeableActivity
.
Tuy nhiên, bạn phải đặt
android:resizeableActivity
thành "true" nếu hoạt động của bạn hỗ trợ thuộc tính khác
chế độ nhiều cửa sổ.)
Android 8.0 (API cấp 26) giới thiệu một đối tượng mới là PictureInPictureParams
,
mà bạn chuyển đến các phương thức PIP để chỉ định cách một hoạt động hoạt động
khi ở chế độ PIP. Đối tượng này chỉ định các thuộc tính như
tỷ lệ khung hình ưu tiên của hoạt động.
Các phương thức PIP hiện có được mô tả trong Thêm Chế độ Hình trong hình hiện có thể được sử dụng trên tất cả các thiết bị Android chứ không chỉ trên Android TV. Ngoài ra, Android 8.0 cung cấp các phương thức sau để hỗ trợ Chế độ PIP:
Activity.enterPictureInPictureMode(PictureInPictureParams args)
: Đặt hoạt động ở chế độ hình trong hình. Tỷ lệ khung hình của hoạt động và các chế độ cài đặt cấu hình khác do args chỉ định. Nếu có trường trong args trống, hệ thống sử dụng giá trị đã đặt vào lần gần đây nhất bạn có tên làActivity.setPictureInPictureParams()
.Hoạt động được chỉ định được đặt ở một góc của màn hình; phần còn lại của màn hình được lấp đầy bằng hoạt động trước đó trên màn hình. Hoạt động chuyển sang chế độ PIP sẽ chuyển sang trạng thái tạm dừng, nhưng vẫn giữ nguyên đầu. Nếu người dùng nhấn vào hoạt động PIP, hệ thống sẽ hiển thị trình đơn cho để người dùng tương tác; không có sự kiện chạm nào tiếp cận hoạt động trong khi ở trạng thái PIP.
-
Activity.setPictureInPictureParams()
: Cập nhật các chế độ cài đặt cấu hình PIP của một hoạt động. Nếu hoạt động là hiện ở chế độ PIP, các chế độ cài đặt đã được cập nhật; điều này rất hữu ích nếu tỷ lệ khung hình của hoạt động sẽ thay đổi. Nếu hoạt động không ở chế độ PIP, các chế độ cài đặt cấu hình này được sử dụng bất kểenterPictureInPictureMode()
mà bạn gọi.
Thông báo
Trong Android 8.0 (API cấp 26), chúng tôi đã thiết kế lại thông báo để cung cấp một cách dễ dàng và nhất quán hơn để quản lý hành vi thông báo và chế độ cài đặt. Những thay đổi này bao gồm:
- Kênh thông báo: Android 8.0 ra mắt các kênh thông báo cho phép bạn tạo kênh mà người dùng có thể tuỳ chỉnh cho từng loại thông báo mà bạn muốn hiển thị. Giao diện người dùng đề cập vào các kênh thông báo dưới dạng danh mục thông báo. Để tìm hiểu cách làm để triển khai các kênh thông báo, hãy xem Quản lý kênh thông báo.
- Dấu chấm thông báo: Android 8.0 ra mắt tính năng hỗ trợ việc hiển thị dấu chấm hoặc huy hiệu, trên biểu tượng trình chạy ứng dụng. Dấu chấm thông báo phản ánh hiện các thông báo mà người dùng chưa đóng hoặc thực hiện hành động. Để tìm hiểu cách sử dụng các dấu chấm thông báo, hãy xem Thông báo huy hiệu.
- Tạm hoãn: Người dùng có thể tạm hoãn thông báo khiến thông báo biến mất trong một khoảng thời gian trước khi xuất hiện lại. Thông báo xuất hiện lại cùng với cùng mức độ quan trọng mà chúng lần đầu xuất hiện. Các ứng dụng có thể xoá hoặc cập nhật một thông báo bị tạm ẩn, nhưng việc cập nhật một thông báo bị tạm ẩn không gây ra mục này xuất hiện lại.
- Thời gian chờ thông báo: Bạn có thể đặt thời gian chờ khi tạo một
thông báo đang sử dụng
setTimeoutAfter()
. Bạn có thể sử dụng phương thức này để chỉ định khoảng thời gian mà sau đó một thông báo bị huỷ. Nếu cần, bạn có thể huỷ thông báo trước khi đã hết một khoảng thời gian chờ được chỉ định. - Cài đặt thông báo: Bạn có thể gọi
setSettingsText()
để đặt văn bản xuất hiện khi bạn tạo liên kết đến tệp từ một thông báo bằng cách sử dụng Ý địnhNotification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
. Hệ thống có thể cung cấp các thông tin bổ sung sau đây với ý định lọc các chế độ cài đặt mà ứng dụng của bạn phải cho người dùng thấy:EXTRA_CHANNEL_ID
,NOTIFICATION_TAG
vàNOTIFICATION_ID
. - Đóng thông báo: Người dùng có thể tự đóng thông báo và
các ứng dụng có thể xoá chúng theo phương thức lập trình. Bạn có thể xác định thời điểm một thông báo
bị loại bỏ và tại sao bị loại bỏ bằng cách triển khai
Phương thức
onNotificationRemoved()
từ LớpNotificationListenerService
. - Màu nền: Bạn có thể đặt và bật màu nền cho
. Bạn chỉ nên sử dụng tính năng này trong các thông báo về
các công việc diễn ra liên tục mà người dùng có thể xem nhanh chóng. Cho
ví dụ: bạn có thể đặt màu nền cho thông báo liên quan đến
đường lái xe hoặc một cuộc gọi điện thoại đang diễn ra. Bạn cũng có thể đặt
sử dụng màu nền mong muốn
setColor()
. Đang thực hiện cho phép bạn sử dụngsetColorized()
để bật việc sử dụng màu nền cho thông báo. - Kiểu nhắn tin: Trong Android 8.0, thông báo sử dụng
Màn hình lớp
MessagingStyle
thêm nội dung ở dạng thu gọn. Bạn nên sử dụng LớpMessagingStyle
cho các thông báo liên quan đến tin nhắn. Bạn cũng có thể sử dụng Phương thứcaddHistoricMessage()
để cung cấp ngữ cảnh cho một cuộc trò chuyện bằng cách thêm tin nhắn từ trước đến các thông báo liên quan đến tin nhắn.
Khung tự động điền
Việc tạo tài khoản, đăng nhập và giao dịch thẻ tín dụng mất nhiều thời gian và có thể dễ bị . Người dùng có thể dễ dàng cảm thấy khó chịu với những ứng dụng đòi hỏi những loại ứng dụng này những công việc lặp lại.
Android 8.0 (API cấp 26) giúp điền vào các biểu mẫu, chẳng hạn như đăng nhập và biểu mẫu thẻ tín dụng, dễ dàng hơn nhờ có Khung tự động điền. Các ứng dụng mới và hiện có hoạt động với Khung tự động điền sau khi người dùng chọn tham gia tự động điền.
Bạn có thể thực hiện một số bước để tối ưu hoá cách ứng dụng hoạt động với khung này. Để biết thêm thông tin, hãy xem Tổng quan về khung tự động điền.
Phông chữ có thể tải xuống
Android 8.0 (API cấp 26) và Thư viện hỗ trợ Android 26 cho phép bạn yêu cầu phông chữ từ của nhà cung cấp thay vì gói phông chữ vào APK hoặc cho phép Tải tệp APK xuống. Tính năng này giúp giảm kích thước APK, tăng ứng dụng tỷ lệ cài đặt thành công và cho phép nhiều ứng dụng dùng chung một phông chữ.
Để biết thêm thông tin về cách tải phông chữ xuống, hãy tham khảo Phông chữ có thể tải xuống.
Phông chữ trong XML
Android 8.0 (API cấp 26) giới thiệu một tính năng mới, Phông chữ trong XML,
cho phép bạn dùng phông chữ làm tài nguyên. Điều này có nghĩa là bạn không cần phải nhóm các phông chữ
dưới dạng nội dung. Phông chữ được biên dịch trong tệp R
và tự động
có sẵn trong hệ thống dưới dạng tài nguyên. Sau đó, bạn có thể truy cập vào các phông chữ này bằng
trợ giúp của một loại tài nguyên mới là font
.
Thư viện hỗ trợ 26 hỗ trợ đầy đủ cho tính năng này trên các thiết bị chạy API phiên bản 14 trở lên.
Để biết thêm thông tin, về cách sử dụng phông chữ làm tài nguyên và truy xuất phông chữ hệ thống, hãy xem phần Phông chữ ở định dạng XML.
Tự động định cỡ TextView
Android 8.0 (API cấp 26) cho phép bạn đặt kích thước văn bản mở rộng hoặc tự động dựa trên kích thước của TextView. Điều này có nghĩa là dễ dàng tối ưu hoá kích thước văn bản trên nhiều màn hình hoặc với nội dung động. Để biết thêm thông tin, về tính năng tự động định cỡ TextView trong Android 8.0, hãy xem phần Tự động định cỡ TextView.
Biểu tượng thích ứng
Android 8.0 (API cấp 26) ra mắt biểu tượng trình chạy thích ứng. Biểu tượng thích ứng hỗ trợ hình ảnh hiệu ứng và có thể hiển thị nhiều hình dạng trên nhiều mẫu thiết bị. Để tìm hiểu cách tạo biểu tượng thích ứng, hãy xem Biểu tượng thích ứng của chúng tôi.
Quản lý màu sắc
Giờ đây, các nhà phát triển ứng dụng tạo ảnh trên Android có thể tận dụng các thiết bị mới có màn hình hỗ trợ gam màu rộng. Để hiển thị gam màu rộng hình ảnh, ứng dụng sẽ cần bật cờ trong tệp kê khai (cho mỗi hoạt động) và tải bitmap bằng cấu hình màu rộng được nhúng (AdobeRGB, Pro Photo RGB, DCI-P3, v.v.).
API WebView
Android 8.0 cung cấp một số API để giúp bạn quản lý
các đối tượng WebView
hiển thị nội dung trên web trong ứng dụng của bạn.
Các API này giúp cải thiện độ ổn định và tính bảo mật của ứng dụng, bao gồm
sau:
- API phiên bản
- API Duyệt web an toàn của Google
- API Xử lý việc chấm dứt
- API Mức độ quan trọng của trình kết xuất
Để tìm hiểu thêm về cách sử dụng các API này, hãy xem Quản lý WebView.
Lớp WebView
hiện bao gồm một Safe Browsing API để tăng cường bảo mật
duyệt web. Để biết thêm thông tin, hãy xem
API Duyệt web an toàn của Google.
Ghim lối tắt và tiện ích
Android 8.0 (API cấp 26) ra mắt tính năng ghim lối tắt trong ứng dụng và các tiện ích khác nhau. Trong ứng dụng, bạn có thể tạo lối tắt và tiện ích được ghim cho các trình chạy được hỗ trợ, tuỳ thuộc vào sự cho phép của người dùng.
Để biết thêm thông tin, hãy xem Ghim lối tắt và tiện ích hướng dẫn về tính năng.
Tỷ lệ khung hình tối đa của màn hình
Android 8.0 (API cấp 26) mang đến những thay đổi về cách định cấu hình tỷ lệ khung hình tối đa của một ứng dụng.
Đầu tiên, Android 8.0 giới thiệu maxAspectRatio mà bạn có thể dùng để đặt tỷ lệ khung hình tối đa cho ứng dụng. Ngoài ra, trong Android 8.0 trở lên, tính năng tỷ lệ khung hình tối đa mặc định là tỷ lệ khung hình gốc của thiết bị mà ứng dụng đang chạy.
Để biết thêm thông tin về cách khai báo tỷ lệ khung hình tối đa, hãy xem Hỗ trợ nhiều màn hình.
Hỗ trợ nhiều màn hình
Kể từ Android 8.0 (API cấp 26), nền tảng này cung cấp các tính năng nâng cao hỗ trợ nhiều màn hình. Nếu một hoạt động hỗ trợ chế độ nhiều cửa sổ và đang chạy trên một thiết bị có nhiều màn hình, người dùng có thể di chuyển hoạt động này từ màn hình này sang màn hình khác. Khi một ứng dụng chạy một hoạt động, ứng dụng đó có thể chỉ định màn hình nào sẽ chạy hoạt động.
Lưu ý: Nếu một hoạt động hỗ trợ chế độ nhiều cửa sổ, Android 8.0 sẽ tự động bật nhiều màn hình cho hoạt động đó. Bạn nên kiểm thử ứng dụng để đảm bảo thiết bị hoạt động tốt trong môi trường nhiều màn hình.
Chỉ một hoạt động tại một thời điểm có thể ở trạng thái đã tiếp tục, ngay cả khi ứng dụng của bạn có nhiều màn hình. Hoạt động có tiêu điểm đang ở trạng thái đã tiếp tục; tất cả các hoạt động hiển thị khác đều bị tạm dừng, nhưng không dừng lại. Thông tin khác trên vòng đời hoạt động khi có một số hoạt động hiển thị, xem Nhiều cửa sổ Vòng đời.
Khi người dùng di chuyển một hoạt động từ màn hình này sang màn hình khác, hệ thống đổi kích thước hoạt động và báo cáo các thay đổi trong thời gian chạy nếu cần. Hoạt động của bạn có thể tự xử lý thay đổi về cấu hình hoặc có thể cho phép hệ thống huỷ bỏ quá trình chứa hoạt động của bạn và tạo lại nó bằng thứ nguyên. Để biết thêm thông tin, hãy xem Cấu hình xử lý Thay đổi.
ActivityOptions
cung cấp 2 phương thức mới để hỗ trợ
nhiều màn hình:
setLaunchDisplayId()
- Chỉ định màn hình mà hoạt động sẽ hiển thị trên đó khi nó được chạy.
getLaunchDisplayId()
- Trả về màn hình khởi chạy hiện tại của hoạt động.
shell adb được mở rộng để hỗ trợ nhiều màn hình.
Giờ đây, bạn có thể dùng lệnh shell start
để khởi chạy một hoạt động,
và để chỉ định màn hình mục tiêu của hoạt động:
adb shell start <activity_name> --display <display_id>
Khoảng đệm và lề bố cục hợp nhất
Android 8.0 (API cấp 26) giúp bạn dễ dàng chỉ định tình huống mà các cạnh đối diện
của một phần tử View
sử dụng cùng một lề hoặc khoảng đệm.
Cụ thể, bạn hiện có thể sử dụng các thuộc tính sau trong tệp XML bố cục của mình
tệp:
-
layout_marginVertical
, xác địnhlayout_marginTop
vàlayout_marginBottom
cùng lúc. -
layout_marginHorizontal
, xác địnhlayout_marginLeft
vàlayout_marginRight
cùng lúc. -
paddingVertical
, xác địnhpaddingTop
vàpaddingBottom
cùng lúc. -
paddingHorizontal
, xác địnhpaddingLeft
vàpaddingRight
cùng lúc.
Lưu ý: Nếu bạn tuỳ chỉnh logic của ứng dụng để
hỗ trợ các định dạng khác nhau
ngôn ngữ và văn hoá, bao gồm cả hướng văn bản, xin lưu ý rằng
không ảnh hưởng đến giá trị của
layout_marginStart
!
layout_marginEnd
,
paddingStart
hoặc
paddingEnd
. Bạn có thể tự đặt các giá trị này, ngoài việc
các thuộc tính bố cục dọc và ngang mới để tạo hành vi bố cục
phụ thuộc vào hướng văn bản.
Chụp con trỏ
Một số ứng dụng, chẳng hạn như trò chơi, máy tính từ xa và ứng dụng ảo hoá, hưởng lợi từ việc kiểm soát con trỏ chuột. Chụp con trỏ là một tính năng mới trong Android 8.0 (API cấp 26) cung cấp khả năng kiểm soát đó bằng cách gửi tất cả các sự kiện chuột vào chế độ xem tập trung trong ứng dụng của bạn.
Kể từ Android 8.0, View
trong ứng dụng của bạn có thể yêu cầu
thu thập con trỏ và định nghĩa một trình nghe để xử lý các sự kiện con trỏ đã thu thập. Chiến lược phát hành đĩa đơn
con trỏ chuột bị ẩn khi ở chế độ này. Khung hiển thị có thể giải phóng chụp con trỏ
khi không cần thông tin về chuột nữa. Hệ thống cũng có thể phát hành
thu thập con trỏ khi khung hiển thị mất tiêu điểm (ví dụ: khi người dùng mở)
một ứng dụng khác.
Để biết thông tin về cách sử dụng tính năng này trong ứng dụng của bạn, hãy xem Chụp con trỏ.
Danh mục ứng dụng
Android 8.0 (API cấp 26) cho phép mỗi ứng dụng khai báo một danh mục phù hợp
vào, khi phù hợp. Các danh mục này được dùng để nhóm các ứng dụng tương tự với nhau
mục đích hoặc chức năng khi trình bày với người dùng, chẳng hạn như trong mục Mức sử dụng dữ liệu, Mức sử dụng pin, hoặc
Mức sử dụng bộ nhớ. Bạn có thể xác định danh mục cho ứng dụng của mình bằng cách đặt giá trị
Thuộc tính android:appCategory
trong <application>
của bạn
thẻ tệp kê khai.
Trình chạy Android TV
Android 8.0 (API cấp 26) bao gồm một giao diện mới tập trung vào nội dung, Trải nghiệm trên màn hình chính của Android TV, hỗ trợ trình mô phỏng Android TV và hình ảnh thiết bị Nexus Player cho Android 8.0. Màn hình chính mới sắp xếp nội dung video trong các hàng tương ứng với các kênh, mỗi kênh được điền bằng các chương trình bởi một ứng dụng trên hệ thống. Ứng dụng có thể xuất bản nhiều kênh và người dùng có thể định cấu hình kênh nào họ muốn xem trên màn hình chính. Màn hình chính của Android TV cũng có hàng Watch Next điền sẵn các chương trình từ ứng dụng, dựa trên thói quen xem của người dùng. Ứng dụng cũng có thể cung cấp bản xem trước video (tự động phát khi người dùng tập trung vào một chương trình). Các API cho việc điền sẵn kênh và chương trình là một phần của TvProvider API, được phân phối dưới dạng một Android Mô-đun Thư viện hỗ trợ với Android 8.0.
Nhóm hoạt ảnh
Kể từ Android 8.0 (API cấp 26), API AnimatorSet
nay hỗ trợ tính năng tìm kiếm và phát trong
đảo ngược. Tính năng tua cho phép bạn đặt vị trí của ảnh động thành một
thời điểm cụ thể. Việc phát theo chiều ngược lại sẽ hữu ích nếu ứng dụng của bạn có ảnh động
cho các hành động có thể hoàn tác. Thay vì xác định hai ảnh động riêng biệt
các loạt, bạn có thể chơi cùng một loạt ngược lại.
Nhập và điều hướng
Cụm điều hướng trên bàn phím
Nếu một hoạt động trong ứng dụng của bạn sử dụng hệ phân cấp khung hiển thị phức tạp, chẳng hạn như cấu hình trong Hình 2, cân nhắc việc sắp xếp các nhóm thành phần giao diện người dùng thành nhiều cụm để dễ dàng hơn điều hướng bằng bàn phím giữa các số liệu. Người dùng có thể nhấn tổ hợp phím Meta+Tab hoặc Search+Tab trên Thiết bị Chromebook, để điều hướng từ cụm này sang cụm khác. Ví dụ hay về các cụm đó bao gồm: bảng điều khiển bên, thanh điều hướng, khu vực nội dung chính và các phần tử có thể chứa nhiều phần tử con.
Cách tạo phần tử View
hoặc ViewGroup
một cụm, hãy đặt
Thuộc tính android:keyboardNavigationCluster
cho
true
trong tệp XML bố cục của phần tử, hoặc truyền true
vào setKeyboardNavigationCluster()
trong logic giao diện người dùng của ứng dụng.
Lưu ý: Các cụm không được lồng ghép mặc dù các cụm không được lồng
có thể xuất hiện ở các cấp khác nhau trong hệ thống phân cấp. Nếu bạn cố gắng
lồng các cụm trên cùng, khung này chỉ xử lý các cụm trên cùng
Phần tử ViewGroup
dưới dạng một cụm.
Trên các thiết bị có màn hình cảm ứng, bạn có thể đặt một cụm từ được chỉ định
ViewGroup
của đối tượng
Phần tử android:touchscreenBlocksFocus
đến true
thành
cho phép điều hướng chỉ sử dụng cụm vào và ra khỏi cụm đó. Nếu bạn áp dụng phương thức này
cấu hình cho một cụm, người dùng không thể sử dụng phím Tab hoặc các phím mũi tên để
điều hướng vào hoặc ra khỏi cụm; họ phải nhấn vào nút điều hướng cụm đồng hồ
tổ hợp bàn phím.
Xem tiêu điểm mặc định
Trong Android 8.0 (API cấp 26), bạn có thể chỉ định View
cần
nhận tiêu điểm sau khi một hoạt động (tái) được tiếp tục và người dùng nhấn một
phím điều hướng trên bàn phím, chẳng hạn như phím tab. Cách áp dụng chế độ "lấy tiêu điểm theo mặc định" này
cài đặt phần tử View
android:focusedByDefault
cho true
trong
tệp XML bố cục chứa thành phần giao diện người dùng hoặc truyền true
vào
setFocusedByDefault()
trong
logic giao diện người dùng của ứng dụng.
Đầu ra bằng giọng nói
Các hoạt động và dịch vụ có thể sử dụng các phiên bản
TextToSpeech
để đọc chính tả và phát âm nội dung. Tính đến
Android 8.0 (API cấp 26), ứng dụng của bạn có thể lấy thông tin thời gian chính xác hơn
về thời điểm một công cụ chuyển văn bản sang lời nói bắt đầu nói các từ tổng hợp riêng lẻ,
miễn là công cụ cung cấp thông tin này. Bạn có thể dùng chức năng này
để thu hút sự chú ý vào những từ cụ thể khi công cụ chuyển văn bản sang lời nói nói
chúng.
Để sử dụng những điểm cải tiến này của công cụ chuyển văn bản sang lời nói trong ứng dụng của bạn, hãy đăng ký
thực thể của UtteranceProgressListener
. Là một phần của
quá trình đăng ký, bao gồm một trình xử lý cho
onRangeStart()
.
Công cụ chuyển văn bản sang lời nói gọi
rangeStart()
để ghi
thời điểm mà thiết bị mong đợi phát lại âm thanh trong một phạm vi văn bản cụ thể
để bắt đầu. Khi âm thanh cho dải văn bản đó bắt đầu phát,
onRangeStart()
thực thi phương thức. Sau đó, ứng dụng của bạn có thể phản hồi lệnh gọi lại này, chẳng hạn như bằng cách
đánh dấu dải ô văn bản liên quan đến cách phát âm đó.
Để biết thêm thông tin về cách theo dõi tiến trình phát của tệp chuyển văn bản sang lời nói
công cụ, hãy xem lớp UtteranceProgressListener
tham chiếu.
Hệ thống
Trình phát hiện StrictMode mới
Android 8.0 (API cấp 26) bổ sung 3 trình phát hiện StrictMode mới để giúp xác định các lỗi có thể xảy ra trong ứng dụng của bạn:
detectUnbufferedIo()
sẽ phát hiện khi ứng dụng của bạn đọc hoặc ghi dữ liệu mà không cần lưu vào bộ đệm. Điều này có thể ảnh hưởng đáng kể hiệu suất.detectContentUriWithoutPermission()
sẽ phát hiện thời điểm ứng dụng của bạn vô tình quên cấp quyền cho một ứng dụng khác khi bắt đầu một Hoạt động bên ngoài ứng dụng của bạn.detectUntaggedSockets()
sẽ phát hiện khi ứng dụng của bạn thực hiện lưu lượng truy cập mạng mà không sử dụngsetThreadStatsTag(int)
để gắn thẻ lưu lượng truy cập của bạn cho mục đích gỡ lỗi .
Dữ liệu đã lưu vào bộ nhớ đệm
Android 8.0 (API cấp 26) cung cấp hướng dẫn và hành vi tốt hơn liên quan đến dữ liệu được lưu vào bộ nhớ đệm. Một
ứng dụng hiện được cấp một hạn mức dung lượng đĩa cho dữ liệu được lưu vào bộ nhớ đệm, như được trả về bởi
getCacheQuotaBytes(UUID)
.
Khi cần giải phóng dung lượng ổ đĩa, hệ thống sẽ bắt đầu bằng cách xoá các tệp đã lưu vào bộ nhớ đệm khỏi ứng dụng vượt quá hạn mức phân bổ của họ. Do đó, nếu bạn lưu giữ dữ liệu đã lưu vào bộ nhớ đệm trong hạn mức phân bổ, các tệp được lưu vào bộ nhớ đệm của bạn sẽ nằm trong số những tệp sau cùng trên hệ thống bị xoá khi nếu cần. Khi hệ thống quyết định những tệp nào đã lưu vào bộ nhớ đệm cần xoá trong ứng dụng của bạn, hệ thống sẽ hãy xem xét các tệp cũ nhất trước (như được xác định theo thời gian sửa đổi).
Ngoài ra còn có hai hành vi mới mà bạn có thể bật trên cơ sở mỗi thư mục để kiểm soát cách hệ thống giải phóng dữ liệu được lưu vào bộ nhớ đệm của bạn:
- Có thể dùng
StorageManager.setCacheBehaviorAtomic()
để cho biết rằng thư mục và mọi nội dung của thư mục đó phải được xoá dưới dạng một đơn vị nguyên tử. - Có thể dùng
setCacheBehaviorTombstone(File, boolean)
để cho biết rằng thay vì xoá các tệp bên trong thư mục, chúng nên được cắt ngắn thành 0 byte trong để giữ nguyên tệp trống.
Cuối cùng, khi bạn cần phân bổ dung lượng ổ đĩa cho các tệp lớn, hãy cân nhắc sử dụng
allocateBytes(FileDescriptor, long)
API (sẽ tự động xoá)
tệp được lưu vào bộ nhớ đệm thuộc về các ứng dụng khác (nếu cần) để đáp ứng yêu cầu của bạn. Khi quyết định liệu
thiết bị có đủ dung lượng ổ đĩa để lưu trữ dữ liệu mới của bạn, hãy gọi
getAllocatableBytes(UUID)
thay vì sử dụng
getUsableSpace()
, vì quy tắc này sẽ xem xét mọi phiên bản được lưu vào bộ nhớ đệm
mà hệ thống sẵn sàng xoá thay mặt bạn.
Phân trang cho trình cung cấp nội dung
Chúng tôi đã cập nhật các trình cung cấp nội dung để bao gồm hỗ trợ tải tệp tập dữ liệu một trang mỗi lần. Ví dụ: ứng dụng ảnh có hàng nghìn hình ảnh có thể truy vấn một tập hợp con dữ liệu cụ thể hiển thị trên một trang. Mỗi trang kết quả do trình cung cấp nội dung trả về được biểu thị bằng một Con trỏ duy nhất . Cả ứng dụng và nhà cung cấp đều phải triển khai tính năng phân trang để tận dụng tính năng này.
Để biết thông tin chi tiết về những thay đổi đối với trình cung cấp nội dung, hãy xem
ContentProvider
và
ContentProviderClient
Yêu cầu làm mới nội dung
ContentProvider
và
Hiện tại, mỗi lớp ContentResolver
bao gồm một
refresh()
, giúp khách hàng dễ dàng biết được liệu
thông tin mà họ yêu cầu là thông tin mới nhất.
Bạn có thể thêm logic làm mới nội dung tuỳ chỉnh bằng cách mở rộng
ContentProvider
. Hãy đảm bảo rằng bạn đã ghi đè
Phương thức refresh()
để trả về
true
, cho khách hàng của nhà cung cấp biết rằng bạn đã cố gắng
để tự làm mới dữ liệu.
Ứng dụng khách của bạn có thể yêu cầu nội dung được làm mới một cách rõ ràng bằng cách gọi một
phương thức khác, còn được gọi là
refresh()
. Khi gọi sự kiện này
chuyển vào URI của dữ liệu để làm mới.
Lưu ý: Vì bạn có thể yêu cầu dữ liệu qua mạng,
bạn nên gọi refresh()
từ
phía máy khách chỉ khi có dấu hiệu rõ ràng cho biết nội dung đã lỗi thời.
Lý do phổ biến nhất để thực hiện loại hình làm mới nội dung này là để phản hồi
vuốt để làm mới
cử chỉ, yêu cầu rõ ràng giao diện người dùng hiện tại để hiển thị nội dung cập nhật.
Các điểm cải tiến về JobScheduler
Android 8.0 (API cấp 26) giới thiệu một số điểm cải tiến đối với JobScheduler
. Những cải tiến này giúp ứng dụng của bạn dễ dàng
để tuân thủ thông tin nền mới
giới hạn thực thi, bởi vì bạn thường có thể sử dụng các công việc đã lên lịch để thay thế
các dịch vụ nền hiện bị hạn chế hoặc broadcast receiver ngầm ẩn.
Các bản cập nhật cho JobScheduler
bao gồm:
-
Bây giờ, bạn có thể liên kết hàng đợi công việc với một công việc đã lên lịch. Để thêm một mục công việc vào
hàng đợi công việc, gọi
JobScheduler.enqueue()
. Khi đang chạy, công việc có thể đưa công việc đang chờ xử lý ra khỏi hàng đợi và xử lý. Chức năng này xử lý nhiều trường hợp sử dụng mà trước đây lẽ ra phải có để bắt đầu một dịch vụ nền, các dịch vụ cụ thể triển khaiIntentService
. -
Android
Thư viện hỗ trợ 26.0.0 giới thiệu một lớp
JobIntentService
mới, cung cấp cùng một lớp chức năng dưới dạngIntentService
nhưng sử dụng công việc thay vì khi chạy trên Android 8.0 (API cấp 26) trở lên. -
Giờ đây, bạn có thể gọi
JobInfo.Builder.setClipData()
để liên kếtClipData
với một công việc. Tùy chọn này cho phép bạn liên kết các trạng thái cấp quyền URI với một công việc, tương tự như cách có thể được cấp quyền truy cập vàoContext.startService()
. Bạn cũng có thể dùng tính năng cấp quyền URI cho ý định vào hàng đợi công việc. -
Các công việc đã lên lịch hiện hỗ trợ một số quy tắc ràng buộc mới:
JobInfo.isRequireStorageNotLow()
- Công việc sẽ không chạy nếu bộ nhớ còn trống trên thiết bị sắp hết.
JobInfo.isRequireBatteryNotLow()
- Công việc không chạy nếu mức pin ở mức hoặc thấp hơn mức tới hạn ngưỡng; đây là mức mà thiết bị hiển thị thông báo Pin yếu cảnh báo của hệ thống.
NETWORK_TYPE_METERED
- Công việc này yêu cầu kết nối mạng có đo lượng dữ liệu, chẳng hạn như hầu hết dữ liệu di động của Google.
Kho dữ liệu tuỳ chỉnh
Android 8.0 (API cấp 26) cho phép bạn cung cấp kho dữ liệu tuỳ chỉnh theo lựa chọn ưu tiên của mình. Điều này có thể hữu ích nếu ứng dụng của bạn lưu trữ các lựa chọn ưu tiên trong một đám mây hay cơ sở dữ liệu cục bộ, hoặc nếu các lựa chọn ưu tiên đó dành riêng cho từng thiết bị. Để biết thêm thông tin về triển khai kho dữ liệu, hãy tham khảo Lưu trữ dữ liệu tuỳ chỉnh.
Cải tiến nội dung đa phương tiện
Bộ định hình khối lượng
Có một lớp VolumeShaper
mới. Sử dụng
để thực hiện các chuyển đổi âm lượng ngắn tự động như rõ dần, mờ dần và làm mờ chéo.
Xem phần Điều khiển biên độ bằng VolumeShaper
để tìm hiểu thêm.
Cải thiện quyền phát âm thanh
Các ứng dụng âm thanh chia sẻ đầu ra âm thanh trên thiết bị bằng cách yêu cầu và từ bỏ quyền phát âm thanh.
Một ứng dụng xử lý các thay đổi về tiêu điểm bằng cách khởi động hoặc dừng phát hoặc giảm âm lượng.
Có một lớp AudioFocusRequest
mới. Dùng lớp này làm tham số của
requestAudioFocus()
,
các ứng dụng có các tính năng mới khi xử lý các thay đổi về quyền phát âm thanh:
tự động giảm âm thanh và
chậm hơn lấy tiêu điểm.
Chỉ số về nội dung nghe nhìn
Phương thức getMetrics()
mới trả về PersistableBundle
đối tượng chứa cấu hình
và thông tin về hiệu suất, được biểu thị dưới dạng bản đồ các thuộc tính và giá trị.
Phương thức getMetrics()
được xác định cho các lớp nội dung nghe nhìn sau:
MediaPlayer.getMetrics()
MediaRecorder.getMetrics()
MediaCodec.getMetrics()
MediaExtractor.getMetrics()
Các chỉ số được thu thập riêng cho mỗi trường hợp và duy trì trong vòng đời của thực thể đó. Nếu không có chỉ số, phương thức sẽ trả về rỗng. Các chỉ số thực tế được trả về tuỳ thuộc vào lớp.
MediaPlayer
Kể từ Android 8.0 (API cấp 26) MediaPlayer có thể phát Được bảo vệ bằng DRM material và nội dung nghe nhìn đã mã hoá ở cấp mẫu HLS.
Android 8.0 ra mắt quy trình nạp chồng mới
Lệnh seekTo()
cung cấp thông tin chi tiết
điều khiển khi tua đến một khung hình. Đoạn mã này bao gồm tham số thứ hai chỉ định chế độ tua:
SEEK_PREVIOUS_SYNC
di chuyển vị trí nội dung nghe nhìn đến một khung đồng bộ (hoặc phím) được liên kết với nguồn dữ liệu ngay trước hoặc tại một thời điểm nhất định.SEEK_NEXT_SYNC
di chuyển vị trí nội dung nghe nhìn đến một khung đồng bộ hoá (hoặc phím) được liên kết bằng một nguồn dữ liệu ngay sau hoặc tại một thời điểm nhất định.SEEK_CLOSEST_SYNC
di chuyển vị trí nội dung nghe nhìn đến một khung đồng bộ (hoặc phím) được liên kết với một nguồn dữ liệu gần nhất hoặc tại một thời điểm nhất định.SEEK_CLOSEST
di chuyển vị trí nội dung nghe nhìn sang một khung hình (không nhất thiết là đồng bộ hoá) hoặc khung chính) được liên kết với nguồn dữ liệu có vị trí gần nhất hoặc tại thời điểm nhất định.
Khi tua liên tục, các ứng dụng nên sử dụng bất kỳ chế độ SEEK_
nào thay vì SEEK_CLOSEST
. Chế độ này chạy tương đối chậm hơn nhưng có thể chính xác hơn.
MediaRecorder
- MediaRecorder hiện hỗ trợ định dạng MPEG2_TS, rất hữu ích cho
phát trực tuyến:
Kotlin
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)
Java
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
MediaMuxer
hiện có thể xử lý số lượng luồng âm thanh và video bất kỳ. Bạn không còn bị giới hạn cho một bản âm thanh và/hoặc một bản video. Sử dụngaddTrack()
để kết hợp bao nhiêu bản nhạc tuỳ thích.MediaMuxer
cũng có thể thêm một hoặc nhiều kênh siêu dữ liệu chứa nội dung do người dùng xác định trên mỗi khung hình của bạn. Ứng dụng của bạn xác định định dạng của siêu dữ liệu. Chiến lược phát hành đĩa đơn bản siêu dữ liệu chỉ được hỗ trợ cho vùng chứa MP4.
Siêu dữ liệu có thể hữu ích cho việc xử lý ngoại tuyến. Ví dụ: tín hiệu con quay hồi chuyển từ cảm biến có thể được sử dụng để ổn định video.
Khi thêm một bản siêu dữ liệu, định dạng MIME của bản nhạc đó phải bắt đầu bằng tiền tố
"application/". Việc ghi siêu dữ liệu cũng giống như ghi dữ liệu video/âm thanh, ngoại trừ
rằng dữ liệu không phải từ MediaCodec
. Thay vào đó, ứng dụng truyền một
ByteBuffer
kèm theo dấu thời gian liên kết với
writeSampleData()
.
Dấu thời gian này phải cùng cơ sở thời gian với video và bản âm thanh.
Tệp MP4 đã tạo sử dụng TextMetaDataSampleEntry
được xác định trong phần
12.3.3.2 của ISOBMFF để báo hiệu định dạng mime của siêu dữ liệu. Khi sử dụng MediaExtractor
để trích xuất tệp có bản theo dõi siêu dữ liệu, mime
định dạng của siêu dữ liệu sẽ được trích xuất vào MediaFormat
.
Cải thiện quyền truy cập vào tệp nội dung nghe nhìn
Chiến lược phát hành đĩa đơn
Khung truy cập bộ nhớ (SAF) cho phép các ứng dụng hiển thị
DocumentsProvider
, có thể cung cấp quyền truy cập vào tệp
trong nguồn dữ liệu cho các ứng dụng khác. Trên thực tế, một
nhà cung cấp tài liệu thậm chí có thể cung cấp quyền truy cập vào các tệp
nằm trên bộ nhớ mạng hoặc sử dụng một giao thức như
Giao thức truyền nội dung nghe nhìn (MTP).
Tuy nhiên, việc truy cập vào các tệp đa phương tiện lớn từ một nguồn dữ liệu từ xa đã gây ra một số thách thức:
- Trình phát nội dung đa phương tiện yêu cầu quyền truy cập có thể tìm kiếm vào một tệp từ nhà cung cấp tài liệu. Trong trường hợp một tệp đa phương tiện lớn nằm trên một nguồn dữ liệu từ xa, nhà cung cấp tài liệu phải tìm nạp trước tất cả các dữ liệu và tạo một ảnh chụp nhanh chỉ số mô tả tệp. Trình phát nội dung đa phương tiện không thể phát tệp nếu không có tệp đó do đó, việc phát lại không thể bắt đầu cho đến khi trình cung cấp tài liệu kết thúc đang tải tệp xuống.
- Trình quản lý bộ sưu tập nội dung nghe nhìn, chẳng hạn như ứng dụng ảnh, phải truyền tải hàng loạt truy cập URI để truy cập nội dung nghe nhìn được lưu trữ trên thẻ SD bên ngoài thông qua . Mẫu truy cập này thực hiện các thao tác hàng loạt trên nội dung nghe nhìn, chẳng hạn như di chuyển, sao chép và xoá – khá chậm.
- Trình quản lý bộ sưu tập nội dung nghe nhìn không thể xác định vị trí của tài liệu dựa trên URI. Điều này gây khó khăn cho các loại ứng dụng này trong việc cho phép người dùng lựa chọn nơi lưu tệp đa phương tiện.
Android 8.0 giải quyết từng thách thức này bằng cách cải thiện Quyền truy cập vào bộ nhớ Khung.
Nhà cung cấp tài liệu tuỳ chỉnh
Kể từ Android 8.0, Khung truy cập bộ nhớ cho phép tài liệu tuỳ chỉnh nhà cung cấp để tạo chỉ số mô tả tệp có thể tìm kiếm cho các tệp nằm trong một nguồn dữ liệu từ xa. SAF có thể mở một tệp để lấy một tệp gốc có thể tìm kiếm mã mô tả. Sau đó, SAF gửi các yêu cầu byte riêng biệt đến tài liệu Google Cloud. Tính năng này cho phép nhà cung cấp tài liệu trả về phạm vi chính xác các byte mà một ứng dụng trình phát nội dung đa phương tiện đã yêu cầu thay vì lưu toàn bộ vào bộ nhớ đệm tệp trước.
Để sử dụng tính năng này, bạn cần gọi hàm mới
StorageManager.openProxyFileDescriptor()
. Chiến lược phát hành đĩa đơn
Phương thức openProxyFileDescriptor()
chấp nhận một đối tượng ProxyFileDescriptorCallback
làm lệnh gọi lại. SAF yêu cầu
lệnh gọi lại bất cứ khi nào một ứng dụng khách thực hiện các thao tác đối với tệp trên
chỉ số mô tả tệp được trả về từ nhà cung cấp tài liệu.
Quyền truy cập trực tiếp vào tài liệu
Kể từ Android 8.0 (API cấp 26), bạn có thể sử dụng
getDocumentUri()
phương thức đến
nhận URI tham chiếu đến cùng một tài liệu với mediaUri
đã cho.
Tuy nhiên, vì URI trả về được hỗ trợ bởi
DocumentsProvider
, người quản lý bộ sưu tập đa phương tiện có thể truy cập
tài liệu đó mà không phải truyền tải qua cây của các thư mục có phạm vi.
Do đó, người quản lý truyền thông có thể thực hiện các thao tác đối với tệp trên tài liệu
nhanh hơn đáng kể.
Thận trọng: Phương thức getDocumentUri()
chỉ xác định các tệp nội dung nghe nhìn; nó không cấp cho ứng dụng
quyền truy cập vào các tệp đó. Để tìm hiểu thêm về cách lấy quyền truy cập
quyền truy cập vào các tệp đa phương tiện, hãy xem tài liệu tham khảo.
Đường dẫn đến tài liệu
Khi sử dụng Khung truy cập bộ nhớ trong Android 8.0 (API cấp 26), bạn có thể sử dụng
Phương thức findDocumentPath()
, có trong cả hai
DocumentsContract
và
DocumentsProvider
các lớp khác nhau, để xác định đường dẫn từ gốc của hệ thống tệp dựa vào
Mã nhận dạng. Phương thức trả về đường dẫn này trong một
Đối tượng DocumentsContract.Path
. Trong trường hợp một tệp
hệ thống có nhiều đường dẫn xác định đến cùng một tài liệu, thì phương thức này sẽ trả về
được sử dụng thường xuyên nhất để truy cập vào tài liệu có ID đã cho.
Chức năng này đặc biệt hữu ích trong các trường hợp sau:
- Ứng dụng của bạn sử dụng tính năng "lưu dưới dạng" hộp thoại hiển thị vị trí của một tài liệu cụ thể.
- Ứng dụng của bạn hiển thị các thư mục ở chế độ xem kết quả tìm kiếm và phải tải thư mục con các tài liệu nằm trong một thư mục cụ thể nếu người dùng chọn .
Lưu ý: Nếu ứng dụng của bạn chỉ có quyền truy cập vào một số tài liệu
trong đường dẫn, giá trị trả về của findDocumentPath()
chỉ bao gồm
các thư mục và tài liệu mà ứng dụng của bạn có thể truy cập.
Đang theo dõi việc phát âm thanh
Dịch vụ hệ thống AudioManager
duy trì danh sách
đang hoạt động AudioPlaybackConfiguration
. Mỗi đối tượng trong số đó
chứa thông tin về một phiên phát âm thanh cụ thể. Ứng dụng của bạn có thể
truy xuất tập hợp các cấu hình hiện đang hoạt động bằng cách gọi
getActivePlaybackConfigurations()
.
Kể từ Android 8.0 (API cấp 26), bạn có thể đăng ký một lệnh gọi lại để thông báo cho
ứng dụng của bạn khi một hoặc nhiều
Các đối tượng AudioPlaybackConfiguration
đã thay đổi. Để làm như vậy,
gọi registerAudioPlaybackCallback()
, truyền vào một thực thể của
AudioManager.AudioPlaybackCallback
Chiến lược phát hành đĩa đơn
Lớp AudioManager.AudioPlaybackCallback
chứa
Phương thức onPlaybackConfigChanged()
mà hệ thống gọi khi âm thanh
các thay đổi về cấu hình phát.
Khả năng kết nối
Nhận biết Wi-Fi
Android 8.0 (API cấp 26) bổ sung khả năng hỗ trợ tính năng Nhận biết Wi-Fi dựa trên Neighbor Quy cách kết nối mạng nhận biết (NAN). Trên các thiết bị có Các ứng dụng, thiết bị ở gần và phần cứng Nhận biết Wi-Fi có thể khám phá và giao tiếp qua Wi-Fi mà không có điểm truy cập Internet. Chúng tôi đang làm việc với phần cứng của mình để cung cấp công nghệ Nhận biết Wi-Fi cho các thiết bị trong thời gian sớm nhất có thể. Cho thông tin về cách tích hợp tính năng Nhận biết Wi-Fi vào ứng dụng của bạn, hãy xem phần Nhận biết Wi-Fi.
Bluetooth
Android 8.0 (API cấp 26) làm phong phú thêm tính năng hỗ trợ Bluetooth của nền tảng này bằng cách bổ sung: tính năng:
- Hỗ trợ chuẩn AVRCP 1.4, cho phép duyệt xem thư viện bài hát.
- Hỗ trợ chuẩn Bluetooth 5.0 Năng lượng thấp (BLE).
- Tích hợp bộ mã hoá và giải mã LDAC Sony vào ngăn xếp Bluetooth.
Ghép nối thiết bị đồng hành
Android 8.0 (API cấp 26) cung cấp các API cho phép bạn tuỳ chỉnh hộp thoại yêu cầu ghép nối khi cố gắng ghép nối với các thiết bị đồng hành qua Bluetooth, BLE và Wi-Fi. Để biết thêm thông tin, hãy xem Thiết bị đồng hành Ghép nối.
Để biết thêm thông tin về cách sử dụng Bluetooth trên Android, hãy xem Hướng dẫn về Bluetooth. Cho thay đổi đối với Bluetooth dành riêng cho Android 8.0 (API cấp 26), hãy xem Phần Bluetooth của phần Trang Các thay đổi về hành vi trên Android 8.0.
Chia sẻ
Chia sẻ thông minh
Android 8.0 (API cấp 26) tìm hiểu về hoạt động của người dùng chia sẻ được cá nhân hoá và hiểu rõ hơn về từng loại nội dung để chia sẻ. Ví dụ: nếu người dùng chụp ảnh biên nhận, Android 8.0 có thể đề xuất một ứng dụng theo dõi chi phí; nếu người dùng tự chụp ảnh chân dung, một mạng xã hội có thể xử lý hình ảnh tốt hơn. Android 8.0 tự động học tất cả những điều này theo đánh giá của người dùng các lựa chọn ưu tiên được cá nhân hoá.
Tính năng chia sẻ thông minh hoạt động với các loại nội dung không phải image
, chẳng hạn như
audio
, video
, text
, URL
,
và hơn thế nữa
Để bật tính năng Chia sẻ thông minh, hãy thêm ArrayList
/tối đa 3 tệp
chuỗi chú thích cho ý định chia sẻ nội dung. Chú thích phải
mô tả các thành phần hoặc chủ đề chính trong nội dung. Ví dụ về mã sau đây
cho biết cách thêm chú thích vào ý định:
Kotlin
val annotations: ArrayList<String> = arrayListOf( "topic1", "topic2", "topic3" ) intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations )
Java
ArrayList<String> annotations = new ArrayList<>(); annotations.add("topic1"); annotations.add("topic2"); annotations.add("topic3"); intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations );
Để biết thông tin chi tiết về Chú thích chia sẻ thông minh, hãy xem
EXTRA_CONTENT_ANNOTATIONS
.
Công cụ phân loại văn bản
Trên các thiết bị tương thích, các ứng dụng có thể sử dụng Trình phân loại văn bản mới để kiểm tra xem
chuỗi khớp với một loại thực thể phân loại đã biết và nhận lựa chọn đề xuất
lựa chọn thay thế. Các đối tượng được hệ thống nhận dạng bao gồm địa chỉ, URL
số điện thoại và địa chỉ email. Để biết thêm thông tin, hãy xem
TextClassifier
.
Hỗ trợ tiếp cận
Android 8.0 (API cấp 26) hỗ trợ một số tính năng hỗ trợ tiếp cận mới cho những nhà phát triển tạo dịch vụ hỗ trợ tiếp cận của riêng họ:
- Danh mục số lượng mới để điều chỉnh hỗ trợ tiếp cận âm lượng.
- Vân tay số cử chỉ làm cơ chế nhập.
- Đa ngôn ngữ chuyển văn bản sang lời nói.
- Dựa trên phần cứng hỗ trợ tiếp cận lối tắt để truy cập nhanh vào dịch vụ hỗ trợ tiếp cận ưu tiên.
- Hỗ trợ cho tiếp theo cử chỉ hoặc trình tự các nét có lập trình.
- Một hỗ trợ tiếp cận nút để gọi một trong nhiều tính năng hỗ trợ tiếp cận đã bật (chỉ có trên các thiết bị sử dụng khu vực điều hướng được kết xuất bằng phần mềm).
- Đã chuẩn hoá giá trị trong dải một chiều.
- Một số tính năng cho đang xử lý văn bản dễ dàng hơn, bao gồm cả văn bản gợi ý và vị trí của văn bản trên màn hình. ký tự.
Bảo mật và quyền riêng tư
Quyền
Android 8.0 (API cấp 26) giới thiệu một số quyền mới liên quan đến điện thoại:
-
Quyền
ANSWER_PHONE_CALLS
cho phép ứng dụng của bạn trả lời cuộc gọi đến theo phương thức lập trình. Để xử lý cuộc gọi điện thoại đến sau ứng dụng của mình, bạn có thể sử dụngacceptRingingCall()
. -
Quyền
READ_PHONE_NUMBERS
cấp cho ứng dụng của bạn quyền đọc các số điện thoại được lưu trữ trên thiết bị.
Cả hai quyền này đều được phân loại là
nguy hiểm
và đều là một phần của
PHONE
nhóm quyền.
API khám phá và truy cập tài khoản mới
Android 8.0 (API cấp 26) giới thiệu một số cải tiến về cách ứng dụng có quyền truy cập vào tài khoản người dùng. Đối với các tài khoản mà họ quản lý, trình xác thực có thể sử dụng chính sách riêng để quyết định xem có ẩn tài khoản hay không, hoặc tiết lộ tài khoản cho một ứng dụng. Hệ thống Android theo dõi các ứng dụng có thể truy cập vào một tài khoản cụ thể.
Trong các phiên bản trước của Android, các ứng dụng muốn theo dõi danh sách
tài khoản người dùng đã phải nhận thông tin cập nhật về tất cả tài khoản, bao gồm cả các tài khoản có
không liên quan. Android 8.0 bổ sung
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
Phương thức này cho phép ứng dụng chỉ định danh sách các loại tài khoản
cho tài khoản nào sẽ nhận được thay đổi.
Nội dung thay đổi đối với API
AccountManager cung cấp 6 phương thức mới để giúp các trình xác thực quản lý các ứng dụng có thể xem một tài khoản:
setAccountVisibility(android.accounts.Account, java.lang.String, int)
: Đặt mức độ hiển thị cho một gói và tài khoản người dùng cụ thể kết hợp.-
getAccountVisibility(android.accounts.Account, java.lang.String)
: Xem cấp độ hiển thị cho gói và tài khoản người dùng cụ thể kết hợp. -
getAccountsAndVisibilityForPackage(java.lang.String, java.lang.String)
: Cho phép trình xác thực xem tài khoản và cấp độ hiển thị của một gói nhất định. -
getPackagesAndVisibilityForAccount(android.accounts.Account)
: Cho phép trình xác thực lấy giá trị chế độ hiển thị đã lưu trữ cho một tài khoản cụ thể. -
addAccountExplicitly(android.accounts.Account, java.lang.String, android.os.Bundle, java.util.Map<java.lang.String, java.lang.Integer>)
: Cho phép trình xác thực khởi chạy giá trị chế độ hiển thị của một tài khoản. -
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
: Thêm trình ngheOnAccountsUpdateListener
vào Đối tượngAccountManager
. Hệ thống gọi trình nghe này bất cứ khi nào danh sách tài khoản trên thiết bị thay đổi.
Android 8.0 (API cấp 26) giới thiệu hai giá trị Tên gói đặc biệt để chỉ định chế độ hiển thị
cho các ứng dụng không được thiết lập bằng cách sử dụng
setAccountVisibility(android.accounts.Account, java.lang.String, int)
. Chiến lược phát hành đĩa đơn
PACKAGE_NAME_KEY_LEGACY_VISIBLE
được áp dụng cho các ứng dụng có
GET_ACCOUNTS
và các phiên bản mục tiêu của
Android thấp hơn Android 8.0 hoặc
khớp với trình xác thực nhắm mục tiêu bất kỳ phiên bản Android nào.
PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE
cung cấp giá trị hiển thị mặc định cho
các ứng dụng chưa được thiết lập trước đây và
PACKAGE_NAME_KEY_LEGACY_VISIBLE
không
có thể áp dụng.
Để biết thêm thông tin về các API khám phá và truy cập tài khoản mới, hãy xem
tham khảo cho
AccountManager
và
OnAccountsUpdateListener
Thử nghiệm
Kiểm thử khả năng đo lường
Android 8.0 (API cấp 26) cung cấp các tính năng hỗ trợ bổ sung sau đây cho ứng dụng của bạn kiểm thử đo lường.
Chạy dựa trên các quy trình ứng dụng không phải quy trình mặc định
Bây giờ, bạn có thể chỉ định rằng một kiểm thử đo lường cụ thể sẽ chạy dựa trên một quy trình bên ngoài quy trình mặc định của ứng dụng. Cấu hình này hữu ích nếu ứng dụng của bạn chứa nhiều hoạt động chạy trong nhiều quy trình.
Để xác định khả năng đo lường quy trình không mặc định, hãy chuyển đến tệp kê khai
rồi chuyển đến tệp mong muốn
Phần tử <instrumentation>
. Thêm
android:targetProcess
và đặt giá trị của thuộc tính đó thành một trong
như sau:
- Tên của một quy trình cụ thể.
- Danh sách tên quy trình được phân tách bằng dấu phẩy.
- Một ký tự đại diện (
"*"
), cho phép chạy khả năng đo lường dựa trên bất kỳ quy trình được khởi chạy nào thực thi mã trong gói được chỉ định trong thuộc tínhandroid:targetPackage
.
Trong khi thực thi chương trình kiểm thử đo lường, bạn có thể kiểm tra xem quy trình nào
đang kiểm thử bằng cách gọi getProcessName()
.
Báo cáo kết quả trong khi thử nghiệm
Giờ đây, bạn có thể báo cáo kết quả trong khi thực thi chương trình kiểm thử đo lường,
thay vì sau đó, bằng cách gọi addResults()
.
Ý định mô phỏng cho việc kiểm thử
Để dễ dàng tạo các bài kiểm thử giao diện người dùng độc lập, riêng biệt cho ứng dụng của bạn
Android 8.0 (API cấp 26) giới thiệu
onStartActivity()
. Bạn sẽ ghi đè phương thức này trong một lớp con tuỳ chỉnh của phương thức
Instrumentation.ActivityMonitor
để xử lý một thuộc tính cụ thể
ý định mà lớp kiểm thử của bạn gọi.
Khi lớp kiểm thử của bạn gọi ý định, phương thức sẽ trả về một mã giả lập
Đối tượng Instrumentation.ActivityResult
thay vì thực thi
chính ý định. Bằng cách sử dụng logic ý định mô phỏng này trong các kiểm thử, bạn có thể tập trung
về cách hoạt động của bạn chuẩn bị và xử lý ý định mà bạn truyền đến một
hoạt động khác nhau hoặc chuyển sang một ứng dụng hoàn toàn khác.
Thời gian chạy và Công cụ
Tối ưu hoá nền tảng
Android 8.0 (API cấp 26) mang thời gian chạy và các tính năng tối ưu hoá khác cho nền tảng dẫn đến một số cải thiện về hiệu suất. Những hoạt động tối ưu hoá này bao gồm thu thập rác bằng cách nén đồng thời, sử dụng bộ nhớ và vị trí của mã hiệu quả hơn.
Những hoạt động tối ưu hoá này giúp thời gian khởi động nhanh hơn, cũng như hiệu suất tốt hơn trong cả Hệ điều hành và ứng dụng.
Đã cập nhật tính năng hỗ trợ ngôn ngữ Java
Android 8.0 (API cấp 26) hỗ trợ thêm một số API Java OpenJDK:
java.time
trong OpenJDK 8.java.nio.file
vàjava.lang.invoke
trong OpenJDK 7.
Để tìm hiểu thêm về các lớp và phương thức trong các lớp mới được thêm này hãy xem tài liệu tham khảo API.
Nếu bạn muốn dùng các tính năng ngôn ngữ Java 8 trong Android Studio, thì bạn nên tải phiên bản xem trước mới nhất xuống.
API Khung Android ICU4J đã cập nhật
Android 8.0 (API cấp 26) mở rộng
Khung Android ICU4J
API – một tập hợp con của các API ICU4J – dành cho nhà phát triển ứng dụng
sử dụng trong gói android.icu
. Các API này sử dụng dữ liệu bản địa hoá
có trên thiết bị, nhờ đó bạn có thể giảm dấu vết APK bằng cách không biên dịch
Các thư viện ICU4J trong APK của bạn.
Cấp độ API Android | Phiên bản ICU | Phiên bản CLDR | Phiên bản Unicode |
---|---|---|---|
Android 7.0 (API cấp 24), Android 7.1 (API cấp 25) | 56 | 28 | 8.0 |
Android 8.0 (API cấp 26) | 58.2 | 30.0.3 | 9.0 |
Để biết thêm thông tin về việc quốc tế hoá trên Android, bao gồm Hỗ trợ ICU4J, xem Quốc tế hoá trên Android.
Android Enterprise
Đã ra mắt các tính năng và API mới dành cho doanh nghiệp cho các thiết bị đang chạy Android 8.0 (API cấp 26). Những điểm nổi bật bao gồm:
- Hồ sơ công việc trên các thiết bị được quản lý hoàn toàn giúp doanh nghiệp tách biệt công việc với dữ liệu cá nhân của bạn trong khi quản lý cả hai.
- Tính năng uỷ quyền API giúp chủ sở hữu thiết bị và hồ sơ chỉ định ứng dụng sang các ứng dụng khác.
- Cải thiện trải nghiệm người dùng trong quy trình cấp phép (bao gồm tuỳ chỉnh) giảm thời gian thiết lập.
- Các tính năng kiểm soát mới qua Bluetooth, Wi-Fi, sao lưu và bảo mật cho phép doanh nghiệp quản lý nhiều thiết bị hơn. Tính năng ghi nhật ký hoạt động mạng giúp doanh nghiệp theo dõi gặp nhiều vấn đề nhất.
Để tìm hiểu thêm về những API này cũng như các tính năng và API mới khác của Android Enterprise, xem phần Android trong Enterprise.