Cấp độ API: 21
Android 5.0 (LOLLIPOP) cung cấp các tính năng mới cho người dùng và nhà phát triển ứng dụng. Tài liệu này cung cấp một giới thiệu các API mới đáng chú ý nhất.
Nếu bạn đã phát hành ứng dụng, hãy nhớ xem Hành vi Android 5.0 Những thay đổi mà bạn nên tính đến trong ứng dụng. Những thay đổi về hành vi này có thể ảnh hưởng đến ứng dụng của bạn trên thiết bị Android 5.0, ngay cả khi bạn không sử dụng API mới hoặc nhắm đến chức năng mới.
Để có cái nhìn tổng quan về các tính năng mới của nền tảng, xem Android Lollipop những điểm nổi bật.
Bắt đầu phát triển
Để bắt đầu xây dựng ứng dụng cho Android 5.0, trước tiên, bạn phải nhận SDK Android. Sau đó, hãy sử dụng Trình quản lý SDK để tải xuống Nền tảng SDK Android 5.0 và Hình ảnh hệ thống.
Cập nhật cấp độ API mục tiêu của bạn
Để tối ưu hoá ứng dụng của bạn hiệu quả hơn cho các thiết bị chạy Android 5.0,
đặt targetSdkVersion
của bạn thành
"21"
, hãy cài đặt ứng dụng của bạn trên Android
Hình ảnh hệ thống 5.0, kiểm thử rồi xuất bản ứng dụng cập nhật bằng
thay đổi này.
Bạn có thể sử dụng các API của Android 5.0 trong khi vẫn hỗ trợ các phiên bản cũ
các phiên bản bằng cách thêm các điều kiện vào mã để kiểm tra cấp độ API của hệ thống
trước khi thực thi các API mà minSdkVersion
của bạn không hỗ trợ.
Để tìm hiểu thêm về cách duy trì khả năng tương thích ngược, hãy đọc bài viết Hỗ trợ
Nhiều phiên bản nền tảng.
Để biết thêm thông tin về cách hoạt động của các cấp độ API, hãy đọc bài viết API là gì Cấp độ?
Các thay đổi quan trọng về hành vi
Nếu bạn từng phát hành một ứng dụng cho Android, hãy lưu ý rằng những thay đổi trong Android 5.0 có thể ảnh hưởng đến ứng dụng của bạn.
Vui lòng xem Các thay đổi về Android 5.0 để biết toàn bộ thông tin.
Giao diện người dùng
Hỗ trợ Material Design
Android 5.0 hỗ trợ thêm thiết kế Material Design mới của Android phong cách. Bạn có thể tạo ứng dụng có thiết kế Material Design, linh hoạt về mặt hình ảnh và có các hiệu ứng chuyển đổi thành phần giao diện người dùng tạo cảm giác tự nhiên cho người dùng. Các hình thức hỗ trợ này bao gồm:
- Giao diện Material
- Xem bóng
- Tiện ích
RecyclerView
- Hiệu ứng định kiểu và hoạt ảnh có thể vẽ
- Hiệu ứng chuyển đổi hoạt động và ảnh động Material Design
- Ảnh động cho thuộc tính khung hiển thị dựa trên trạng thái của khung hiển thị
- Các tiện ích giao diện người dùng và thanh ứng dụng có thể tuỳ chỉnh với các bảng màu do bạn kiểm soát
- Có thể vẽ ở dạng ảnh động và tĩnh dựa trên đồ hoạ vectơ XML
Để tìm hiểu thêm về cách thêm chức năng Material Design vào ứng dụng của bạn, hãy xem Material Design.
Các tài liệu và hoạt động đồng thời trong màn hình gần đây
Trong các bản phát hành trước,
màn hình Gần đây
chỉ có thể hiển thị một công việc cho mỗi ứng dụng mà người dùng đã tương tác
gần đây nhất. Giờ đây, ứng dụng của bạn có thể mở thêm các nhiệm vụ cần thiết để thực hiện thêm
các hoạt động đồng thời cho tài liệu. Tính năng này hỗ trợ đa nhiệm bằng cách
cho phép người dùng nhanh chóng chuyển đổi giữa từng hoạt động và tài liệu từ
màn hình gần đây, với trải nghiệm chuyển đổi nhất quán trên tất cả ứng dụng.
Ví dụ về những thao tác đồng thời như vậy có thể bao gồm các thẻ đang mở trên một trang web
ứng dụng trình duyệt, tài liệu trong ứng dụng cải thiện hiệu suất, kết quả trùng khớp đồng thời trong
trò chơi hoặc các cuộc trò chuyện trong ứng dụng nhắn tin. Ứng dụng của bạn có thể quản lý các nhiệm vụ của mình
thông qua lớp ActivityManager.AppTask
.
Để chèn điểm ngắt hợp lý để hệ thống coi hoạt động của bạn là một hoạt động mới
tác vụ, sử dụng FLAG_ACTIVITY_NEW_DOCUMENT
khi
khởi chạy hoạt động bằng startActivity()
. Bạn cũng có thể xác định hành vi này bằng cách đặt
<hoạt động>
thuộc tính documentLaunchMode
của phần tử thành "intoExisting"
hoặc
"always"
trong tệp kê khai của bạn.
Để tránh làm lộn xộn màn hình gần đây, bạn có thể đặt số lượng tối đa
công việc từ ứng dụng của bạn có thể xuất hiện trên màn hình đó. Để thực hiện việc này, hãy đặt
<ứng dụng>
thuộc tính android:maxRecents
. Dòng điện
tối đa có thể chỉ định là 50 tác vụ cho mỗi người dùng (25 tác vụ đối với thiết bị có RAM thấp).
Bạn có thể đặt các tác vụ trong màn hình gần đây để tiếp tục sau khi khởi động lại. Để kiểm soát
hành vi lâu dài, hãy sử dụng
android:persistableMode
. Bạn cũng có thể thay đổi
thuộc tính trực quan của một hoạt động trong màn hình gần đây, chẳng hạn như
màu, nhãn và biểu tượng của hoạt động bằng cách gọi phương thức
setTaskDescription()
.
Bản cập nhật WebView
Android 5.0 cập nhật WebView
triển khai cho Chromium M37, mang đến các cải tiến về bảo mật và độ ổn định,
cũng như các bản sửa lỗi. Chuỗi tác nhân người dùng mặc định cho một
WebView
chạy trên Android 5.0 có
đã được cập nhật để kết hợp 37.0.0.0 làm số phiên bản.
Bản phát hành này giới thiệu lớp PermissionRequest
,
cho phép ứng dụng của bạn cấp quyền WebView
để truy cập vào tài nguyên được bảo vệ như máy ảnh và micrô thông qua API web
chẳng hạn như getUserMedia(). Ứng dụng của bạn phải có
Các quyền của Android đối với các tài nguyên này để cấp quyền cho
WebView
.
Với phương thức onShowFileChooser()
mới,
bạn hiện có thể sử dụng trường biểu mẫu nhập dữ liệu trong WebView
,
và chạy một trình chọn tệp để chọn hình ảnh và tệp từ thiết bị Android.
Ngoài ra, bản phát hành này hỗ trợ cho WebAudio, WebGL và Tiêu chuẩn mở WebRTC. Để tìm hiểu thêm về các tính năng mới có trong bản phát hành này, hãy xem WebView dành cho Android.
Chụp ảnh màn hình và chia sẻ
Android 5.0 cho phép bạn thêm tính năng chụp ảnh màn hình và chia sẻ màn hình vào
ứng dụng của bạn bằng các API android.media.projection
mới. Chức năng này
rất hữu ích, chẳng hạn như nếu bạn muốn bật tính năng chia sẻ màn hình trong một video
hội nghị truyền hình.
Phương thức createVirtualDisplay()
mới
cho phép ứng dụng của bạn ghi lại nội dung của màn hình chính (chế độ mặc định
display) vào đối tượng Surface
mà sau đó ứng dụng của bạn có thể
gửi qua mạng. API chỉ cho phép chụp màn hình không an toàn
chứ không phải âm thanh hệ thống. Để bắt đầu chụp ảnh màn hình, trước tiên, ứng dụng của bạn phải
yêu cầu sự cho phép của người dùng bằng cách khởi chạy hộp thoại chụp ảnh màn hình sử dụng
Intent
có được qua
createScreenCaptureIntent()
.
Để biết ví dụ về cách sử dụng các API mới, hãy xem MediaProjectionDemo
trong dự án mẫu.
Thông báo
Thông báo trên màn hình khoá
Màn hình khoá trong Android 5.0 có khả năng trình bày thông báo. Người dùng có thể chọn cho phép trong phần Cài đặt hay không nội dung thông báo nhạy cảm được hiển thị trên màn hình khoá an toàn.
Ứng dụng của bạn có thể kiểm soát mức độ chi tiết hiển thị khi ứng dụng hiển thị thông báo
hiển thị trên màn hình khoá bảo mật. Để kiểm soát mức độ hiển thị, hãy gọi
setVisibility()
và
chỉ định một trong các giá trị sau:
VISIBILITY_PRIVATE
: Hiển thị thông tin cơ bản, chẳng hạn như biểu tượng thông báo, nhưng ẩn toàn bộ nội dung của thông báo.VISIBILITY_PUBLIC
: Hiện toàn bộ nội dung của thông báo.VISIBILITY_SECRET
: Không hiển thị, ngoại trừ ngay cả biểu tượng của thông báo.
Khi mức độ hiển thị là VISIBILITY_PRIVATE
,
bạn cũng có thể cung cấp phiên bản đã loại bỏ dữ liệu của thông báo
nội dung che thông tin cá nhân. Ví dụ: ứng dụng SMS có thể hiển thị
thông báo cho biết "Bạn có 3 tin nhắn văn bản mới" nhưng ẩn thông báo
nội dung và người gửi. Để cung cấp thông báo thay thế này, trước tiên hãy tạo
thông báo thay thế bằng Notification.Builder
. Thời gian
bạn tạo đối tượng thông báo riêng tư, hãy đính kèm thông báo thay thế
vào ứng dụng thông qua tính năng
setPublicVersion()
.
Siêu dữ liệu của thông báo
Android 5.0 sử dụng siêu dữ liệu liên kết với thông báo của ứng dụng
để sắp xếp thông báo một cách thông minh hơn. Để đặt siêu dữ liệu, hãy gọi hàm
sau đây trong Notification.Builder
khi bạn
tạo thông báo:
setCategory()
: Cho hệ thống biết cách xử lý các thông báo của ứng dụng khi thiết bị ở chế độ ưu tiên (ví dụ: nếu một thông báo biểu thị cuộc gọi đến, tin nhắn nhanh hoặc chuông báo).setPriority()
: Đánh dấu thông báo là quan trọng hơn hoặc ít quan trọng hơn thông báo thông thường. Thông báo có trường mức độ ưu tiên được đặt thànhPRIORITY_MAX
hoặcPRIORITY_HIGH
xuất hiện trong một cửa sổ nổi nhỏ nếu thông báo cũng có âm thanh hoặc rung.addPerson()
: Cho phép bạn thêm một hoặc nhiều người có liên quan đến một thông báo. Ứng dụng của bạn có thể sử dụng thông tin này để báo cho hệ thống biết rằng ứng dụng nên nhóm lại với nhau các thông báo từ những người được chỉ định hoặc xếp hạng thông báo từ những người này trở nên quan trọng hơn.
Đồ hoạ
Hỗ trợ OpenGL ES 3.1
Android 5.0 bổ sung giao diện Java và dịch vụ hỗ trợ riêng cho OpenGL Tiếng Tây Ban Nha 3.1. Chức năng chính mới được cung cấp trong OpenGL ES 3.1 bao gồm:
- Tính toán chương trình đổ bóng
- Tách các đối tượng trong chương trình đổ bóng
- Lệnh vẽ gián tiếp
- Họa tiết nhiều mẫu và khuôn hình
- Cải thiện ngôn ngữ tô bóng
- Tiện ích cho chế độ kết hợp nâng cao và gỡ lỗi
- Khả năng tương thích ngược với OpenGL ES 2.0 và 3.0
Giao diện Java cho OpenGL ES 3.1 trên Android được cung cấp
GLES31
. Khi sử dụng OpenGL ES 3.1, hãy chắc chắn rằng bạn
hãy khai báo thông tin đó trong tệp kê khai bằng
Thẻ <uses-feature>
và thuộc tính android:glEsVersion
. Ví dụ:
<manifest> <uses-feature android:glEsVersion="0x00030001" /> ... </manifest>
Để biết thêm thông tin về cách sử dụng OpenGL ES, bao gồm cả cách kiểm tra phiên bản OpenGL ES được hỗ trợ của thiết bị trong thời gian chạy, hãy xem Hướng dẫn về API OpenGL ES.
Gói tiện ích Android
Ngoài OpenGL ES 3.1, bản phát hành này còn cung cấp một gói tiện ích
Giao diện Java và dịch vụ hỗ trợ riêng cho chức năng đồ hoạ nâng cao. Các
Tiện ích được Android coi là một gói duy nhất. (Nếu
Hiện có ANDROID_extension_pack_es31a
tiện ích, ứng dụng của bạn có thể
giả định tất cả các tiện ích trong gói đều hiện diện và bật ngôn ngữ tô bóng
tính năng có một câu lệnh #extension
duy nhất.)
Gói tiện ích hỗ trợ:
- Hỗ trợ chương trình đổ bóng mảnh được đảm bảo cho vùng đệm lưu trữ chương trình đổ bóng, hình ảnh và nguyên tử (Hỗ trợ chương trình đổ bóng mảnh là không bắt buộc trong OpenGL ES 3.1.)
- Hình ảnh bán tự động và chương trình đổ bóng hình học
- Định dạng nén kết cấu ASTC (LDR)
- Nội suy và tô bóng trên mỗi mẫu
- Nhiều chế độ pha trộn cho mỗi tệp đính kèm màu trong vùng đệm khung
Giao diện Java cho gói tiện ích được cung cấp cùng
GLES31Ext
. Trong tệp kê khai ứng dụng, bạn có thể khai báo rằng
ứng dụng của bạn chỉ được cài đặt trên thiết bị hỗ trợ gói tiện ích.
Ví dụ:
<manifest> <uses-feature android:name=“android.hardware.opengles.aep” android:required="true" /> ... </manifest>
Nội dung nghe nhìn
Camera API (API Máy ảnh) cho các tính năng nâng cao của máy ảnh
Android 5.0 giới thiệu tính năng mới
android.hardware.camera2
API hỗ trợ chụp ảnh và xử lý ảnh có hạt nhỏ. Bạn có thể làm điều này ngay bây giờ
truy cập có lập trình vào các thiết bị camera có sẵn cho hệ thống bằng
getCameraIdList()
và kết nối với một thiết bị cụ thể bằng
openCamera()
Để bắt đầu chụp ảnh, hãy tạo một CameraCaptureSession
và chỉ định các đối tượng Surface
để gửi hình ảnh đã chụp.
CameraCaptureSession
có thể được định cấu hình để
chụp một hoặc nhiều ảnh trong một loạt ảnh.
Để nhận thông báo khi có hình ảnh mới được chụp, hãy triển khai
CameraCaptureSession.CaptureCallback
trình nghe
và đặt ảnh đó trong yêu cầu chụp của bạn. Bây giờ, khi hệ thống hoàn tất hình ảnh
yêu cầu chụp ảnh, CameraCaptureSession.CaptureCallback
của bạn
trình nghe sẽ nhận được một lệnh gọi đến
onCaptureCompleted()
,
cung cấp cho bạn siêu dữ liệu ảnh chụp trong một
CaptureResult
.
Lớp CameraCharacteristics
cho phép bạn
ứng dụng phát hiện những tính năng của máy ảnh có trên thiết bị. Thuộc tính của đối tượng
Thuộc tính INFO_SUPPORTED_HARDWARE_LEVEL
thể hiện cấp độ chức năng của camera.
- Tất cả thiết bị đều hỗ trợ ít nhất
Cấp độ phần cứng
INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
, có các tính năng gần tương đương vớiCamera
không dùng nữa API. - Các thiết bị hỗ trợ cấp độ phần cứng
INFO_SUPPORTED_HARDWARE_LEVEL_FULL
có thể thực hiện theo cách thủ công kiểm soát quá trình chụp và xử lý hậu kỳ, cũng như chụp ảnh có độ phân giải cao ở tốc độ khung hình cao.
Để biết cách sử dụng
Máy ảnh
API, tham khảo cách triển khai Camera2Basic
và Camera2Video
các mẫu trong bản phát hành này.
Phát âm thanh
Bản phát hành này bao gồm các thay đổi sau đối với
AudioTrack
:
- Ứng dụng của bạn hiện có thể cung cấp dữ liệu âm thanh ở định dạng dấu phẩy động
(
ENCODING_PCM_FLOAT
). Chiến dịch này cho phép phạm vi động lớn hơn, độ chính xác nhất quán hơn và khoảng trần lớn hơn. Số học dấu phẩy động đặc biệt hữu ích trong các phép tính trung gian. Điểm cuối phát sử dụng định dạng số nguyên cho dữ liệu âm thanh và có độ sâu bit thấp hơn. (Trong Android 5.0, các phần của quy trình nội bộ chưa dấu phẩy động.) - Ứng dụng của bạn hiện có thể cung cấp dữ liệu âm thanh dưới dạng
ByteBuffer
, trong có cùng định dạng doMediaCodec
cung cấp. WRITE_NON_BLOCKING
có thể đơn giản hoá việc lưu vào bộ đệm và đa luồng cho một số ứng dụng.
Điều khiển chế độ phát nội dung nghe nhìn
Hãy dùng các API thông báo và API đa phương tiện mới để đảm bảo rằng
giao diện người dùng hệ thống biết về chế độ phát nội dung nghe nhìn của bạn và có thể trích xuất và hiển thị ảnh bìa đĩa nhạc.
Giờ đây, việc kiểm soát việc phát nội dung nghe nhìn trên một giao diện người dùng và một dịch vụ sẽ dễ dàng hơn nhờ phiên bản mới
MediaSession
và
MediaController
lớp.
Lớp MediaSession
mới sẽ thay thế
lớp RemoteControlClient
không dùng nữa và cung cấp
một tập hợp phương thức gọi lại để xử lý các thành phần điều khiển truyền tải và nút đa phương tiện.
Nếu ứng dụng của bạn cung cấp tính năng phát nội dung nghe nhìn và chạy trên thiết bị Android
TV hoặc
nền tảng Wear, hãy sử dụng
Lớp MediaSession
để xử lý dữ liệu di chuyển của bạn
bằng cách sử dụng cùng phương thức gọi lại.
Giờ đây, bạn có thể tạo ứng dụng trình điều khiển nội dung nghe nhìn của riêng mình bằng
Lớp MediaController
. Lớp này cung cấp
một cách an toàn cho luồng để giám sát và kiểm soát việc phát nội dung nghe nhìn qua quy trình giao diện người dùng của ứng dụng.
Khi tạo một tay điều khiển, hãy chỉ định MediaSession.Token
để ứng dụng của bạn có thể tương tác với MediaSession
đã cho.
Bằng cách sử dụng các phương thức MediaController.TransportControls
,
bạn có thể gửi các lệnh như play()
,
stop()
,
skipToNext()
,
và setRating()
để điều khiển việc phát lại nội dung nghe nhìn trong phiên đó. Với bộ điều khiển, bạn cũng có thể
đăng ký một đối tượng MediaController.Callback
cho
theo dõi siêu dữ liệu và các thay đổi về trạng thái trong phiên hoạt động.
Ngoài ra, bạn có thể tạo các thông báo đa dạng thức cho phép điều khiển chế độ phát
gắn với một phiên nội dung nghe nhìn có Notification.MediaStyle
mới
.
Duyệt qua nội dung nghe nhìn
Android 5.0 ra mắt tính năng cho phép các ứng dụng duyệt qua nội dung đa phương tiện
của một ứng dụng khác, thông qua thư viện mới
android.media.browse
API. Để hiển thị nội dung đa phương tiện trong ứng dụng của bạn, hãy mở rộng
Lớp MediaBrowserService
. Việc triển khai của bạn đối với
MediaBrowserService
sẽ cung cấp quyền truy cập vào một
MediaSession.Token
để các ứng dụng có thể phát nội dung nghe nhìn
được cung cấp thông qua dịch vụ của bạn.
Để tương tác với dịch vụ trình duyệt nội dung đa phương tiện, hãy sử dụng
Lớp MediaBrowser
. Chỉ định thành phần
cho MediaSession
khi bạn tạo một
Thực thể MediaBrowser
. Bằng cách sử dụng phiên bản trình duyệt đó,
sau đó ứng dụng của bạn có thể kết nối với dịch vụ được liên kết và nhận
Đã hiển thị nội dung MediaSession.Token
đối tượng để phát
thông qua dịch vụ đó.
Bộ nhớ
Lựa chọn thư mục
Android 5.0 mở rộng Khung truy cập bộ nhớ để cho phép người dùng chọn toàn bộ cây con thư mục, cấp cho ứng dụng quyền đọc/ghi vào tất cả tài liệu được chứa mà không yêu cầu người dùng xác nhận đối với từng mục.
Để chọn cây con thư mục, hãy tạo và gửi một
OPEN_DOCUMENT_TREE
ý định. Hệ thống sẽ hiển thị tất cả
Các thực thể DocumentsProvider
hỗ trợ chọn cây con,
cho phép người dùng duyệt qua và chọn một thư mục. URI được trả về biểu thị
quyền truy cập vào cây con đã chọn. Sau đó, bạn có thể dùng buildChildDocumentsUriUsingTree()
và buildDocumentUriUsingTree()
cùng với
query()
để khám phá cây con.
Phương thức createDocument()
mới giúp bạn tạo tài liệu hoặc thư mục mới ở bất cứ đâu
dưới cây con. Để quản lý các tài liệu hiện có, hãy sử dụng
renameDocument()
và
deleteDocument()
Kiểm tra COLUMN_FLAGS
để xác minh khả năng hỗ trợ của nhà cung cấp đối với các lệnh gọi này trước khi thực hiện các lệnh gọi đó.
Nếu bạn đang triển khai DocumentsProvider
và muốn
để hỗ trợ lựa chọn cây con, hãy triển khai isChildDocument()
và đưa FLAG_SUPPORTS_IS_CHILD
vào
trong COLUMN_FLAGS
của bạn.
Android 5.0 cũng giới thiệu các thư mục dành riêng cho gói mới trên
bộ nhớ dùng chung, nơi ứng dụng của bạn có thể đặt các tệp nội dung nghe nhìn để đưa vào
MediaStore
. Gói thuê bao mới
getExternalMediaDirs()
trả về đường dẫn đến
các thư mục trên tất cả thiết bị lưu trữ dùng chung. Tương tự như
getExternalFilesDir()
,
ứng dụng của bạn không cần thêm quyền nào để truy cập vào đường dẫn được trả về. Chiến lược phát hành đĩa đơn
nền tảng định kỳ quét tìm nội dung đa phương tiện mới trong các thư mục này, nhưng bạn cũng có thể
hãy sử dụng MediaScannerConnection
để quét rõ ràng các
nội dung.
Không dây và Loại kết nối
Nhiều kết nối mạng
Android 5.0 cung cấp các API đa mạng mới cho phép ứng dụng của bạn tự động quét tìm các mạng có sẵn với những khả năng cụ thể và thiết lập kết nối với chúng. Chức năng này rất hữu ích khi ứng dụng của bạn cần có một mạng chuyên biệt, chẳng hạn như mạng supL, MMS hoặc mạng thanh toán qua nhà mạng, hoặc nếu bạn muốn gửi dữ liệu bằng một loại giao thức truyền tải cụ thể.
Để chọn và kết nối mạng một cách linh động từ ứng dụng của bạn, hãy làm theo các bước sau các bước:
- Tạo
ConnectivityManager
. - Sử dụng lớp
NetworkRequest.Builder
để tạo một đối tượngNetworkRequest
và chỉ định các tính năng mạng và loại hình di chuyển mà ứng dụng của bạn quan tâm. - Để quét tìm các mạng phù hợp, hãy gọi
requestNetwork()
hoặcregisterNetworkCallback()
rồi chuyển vào Đối tượngNetworkRequest
và cách triển khaiConnectivityManager.NetworkCallback
. Sử dụngrequestNetwork()
nếu bạn muốn chủ động chuyển sang một mạng phù hợp khi phát hiện thấy mạng đó; để nhận để chỉ nhận thông báo của các mạng đã quét mà không cần chủ động chuyển đổi, hãy sử dụngregisterNetworkCallback()
.
Khi phát hiện thấy một mạng phù hợp, hệ thống sẽ kết nối với mạng đó và
gọi
onAvailable()
. Bạn có thể sử dụng đối tượng Network
từ lệnh gọi lại đến
nhận thêm thông tin về mạng hoặc để hướng lưu lượng truy cập để sử dụng
mạng đã chọn.
Bluetooth năng lượng thấp
Android 4.3 giới thiệu hỗ trợ nền tảng cho Bluetooth năng lượng thấp (Bluetooth LE) ở vai trò trung tâm. Trong Android 5.0, giờ đây thiết bị Android có thể hoạt động như một thiết bị ngoại vi Bluetooth LE. Các ứng dụng có thể dùng tính năng này giúp các thiết bị ở gần biết được sự hiện diện của chúng. Ví dụ: bạn có thể tạo các ứng dụng cho phép một thiết bị hoạt động như một máy đếm bước hoặc máy theo dõi sức khoẻ và giao tiếp dữ liệu của mình với một thiết bị Bluetooth LE khác.
Các API android.bluetooth.le
mới cho phép ứng dụng của bạn truyền tin
quảng cáo, quét tìm câu trả lời và biểu mẫu kết nối với Bluetooth ở gần
Thiết bị LE. Để sử dụng các tính năng quảng cáo và quét mới, hãy thêm
BLUETOOTH_ADMIN
quyền trong tệp kê khai của bạn. Khi người dùng cập nhật hoặc tải ứng dụng xuống từ Cửa hàng Play,
họ sẽ được yêu cầu cấp quyền sau đây cho ứng dụng của bạn:
"Thông tin kết nối Bluetooth: Cho phép ứng dụng kiểm soát Bluetooth,
bao gồm phát sóng hoặc nhận thông tin về các thiết bị Bluetooth ở gần".
Bắt đầu quảng cáo Bluetooth năng lượng thấp để các thiết bị khác có thể khám phá
ứng dụng của bạn, hãy gọi
startAdvertising()
và chuyển sang triển khai
Lớp AdvertiseCallback
. Đối tượng gọi lại
nhận được báo cáo về thành công hay thất bại của hoạt động quảng cáo.
Android 5.0 ra mắt lớp ScanFilter
để
mà ứng dụng của bạn chỉ có thể quét để tìm
các loại thiết bị cụ thể mà họ quan tâm. Để bắt đầu quét tìm Bluetooth
Thiết bị LE, gọi startScan()
và truyền vào một danh sách các bộ lọc. Trong lệnh gọi phương thức, bạn cũng phải cung cấp
triển khai ScanCallback
để báo cáo khi một
Đã tìm thấy quảng cáo Bluetooth LE.
Các tính năng nâng cao của NFC
Android 5.0 bổ sung các cải tiến này để mở rộng và khai thác nhiều tính năng hơn sử dụng linh hoạt NFC:
- Tính năng Truyền tia Android hiện đã có trong trình đơn chia sẻ.
- Ứng dụng của bạn có thể gọi tính năng Truyền tia Android trên thiết bị của người dùng để chia sẻ dữ liệu bằng cách
đang gọi
invokeBeam()
. Điều này giúp người dùng không cần phải nhấn thiết bị vào thiết bị khác theo cách thủ công Thiết bị có hỗ trợ NFC để hoàn tất quá trình chuyển dữ liệu. - Bạn có thể sử dụng phương thức
createTextRecord()
mới để tạo một bản ghi NDEF chứa dữ liệu văn bản UTF-8. - Nếu đang phát triển một ứng dụng thanh toán, thì giờ đây bạn có thể
đăng ký mã ứng dụng NFC (AID) một cách linh động bằng cách gọi
registerAidsForService()
. Bạn cũng có thể dùngsetPreferredService()
để thiết lập dịch vụ mô phỏng thẻ ưu tiên được sử dụng khi một hoạt động cụ thể đang chạy trên nền trước.
Dự án Volta
Ngoài các tính năng mới, Android 5.0 nhấn mạnh các cải tiến về pin cuộc sống. Sử dụng các API và công cụ mới để nắm bắt và tối ưu hoá sức mạnh của ứng dụng người dùng.
Đang lên lịch công việc
Android 5.0 cung cấp JobScheduler
mới
API cho phép bạn tối ưu hoá thời lượng pin bằng cách xác định công việc để hệ thống chạy
không đồng bộ vào một thời điểm sau này hoặc trong những điều kiện được chỉ định (chẳng hạn như khi
thiết bị đang sạc). Việc lên lịch công việc sẽ hữu ích trong những trường hợp như:
- Ứng dụng có công việc không dành cho người dùng mà bạn có thể trì hoãn.
- Ứng dụng có công việc mà bạn muốn thực hiện khi thiết bị được cắm vào.
- Ứng dụng có một nhiệm vụ cần truy cập mạng hoặc Wi-Fi kết nối.
- Ứng dụng có một số tác vụ mà bạn muốn chạy dưới dạng lô .
Một đơn vị công việc được đóng gói bởi đối tượng JobInfo
.
Đối tượng này chỉ định tiêu chí lập lịch.
Sử dụng lớp JobInfo.Builder
để định cấu hình cách
tác vụ đã lên lịch sẽ chạy. Bạn có thể lên lịch để tác vụ chạy trong
các điều kiện, chẳng hạn như:
- Bắt đầu khi thiết bị đang sạc
- Bắt đầu khi thiết bị kết nối với một mạng không đo lượng dữ liệu
- Bắt đầu khi thiết bị ở trạng thái rảnh
- Hoàn thành trước một thời hạn nhất định hoặc chậm trễ tối thiểu
Ví dụ: bạn có thể thêm mã như thế này để chạy tác vụ của mình trên một mạng không đo lượng dữ liệu:
Kotlin
val uploadTask: JobInfo = JobInfo.Builder( jobId, serviceComponent /* JobService component */ ).run { setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) build() } val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler jobScheduler.schedule(uploadTask)
Java
JobInfo uploadTask = new JobInfo.Builder(jobId, serviceComponent /* JobService component */) .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED) .build(); JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(uploadTask);
Nếu thiết bị có nguồn điện ổn định (tức là thiết bị đã được cắm nguồn để sử dụng thêm hơn 2 phút và pin ở mức mức độ tốt cho sức khoẻ), hệ thống sẽ chạy mọi công việc đã lên lịch sẵn sàng, ngay cả khi công việc đó chưa hết hạn.
Để xem ví dụ về cách sử dụng API JobScheduler
,
hãy tham khảo mẫu triển khai JobSchedulerSample
trong bản phát hành này.
Công cụ cho nhà phát triển về mức sử dụng pin
Lệnh dumpsys batterystats
mới tạo ra
dữ liệu thống kê về mức sử dụng pin trên một thiết bị, được sắp xếp theo mã nhận dạng người dùng duy nhất
(UID). Số liệu thống kê bao gồm:
- Nhật ký các sự kiện liên quan đến pin
- Số liệu thống kê chung cho thiết bị
- Mức sử dụng nguồn ước tính trên mỗi UID và thành phần hệ thống
- Số mili giây thiết bị di động trên mỗi ứng dụng
- Số liệu thống kê tổng hợp UID của hệ thống
- Số liệu thống kê tổng hợp UID của ứng dụng
Sử dụng tuỳ chọn --help
để tìm hiểu về các tuỳ chọn khác nhau cho
điều chỉnh kết quả đầu ra. Ví dụ: để in mức sử dụng pin
số liệu thống kê cho một gói ứng dụng nhất định kể từ lần sạc thiết bị gần đây nhất, hãy chạy hàm này
:
$ adb shell dumpsys batterystats --charged <package-name>
Bạn có thể sử dụng
Battery Historian
công cụ trên đầu ra của lệnh dumpsys
để
tạo hình ảnh HTML về các sự kiện liên quan đến nguồn từ nhật ký. Chiến dịch này
giúp bạn hiểu và chẩn đoán tình trạng pin dễ dàng hơn
các vấn đề liên quan.
Android tại nơi làm việc và trong ngành giáo dục
Cấp phép được quản lý
Android 5.0 cung cấp chức năng mới để chạy các ứng dụng trong môi trường doanh nghiệp. Đáp quản trị viên thiết bị có thể bắt đầu quy trình cấp phép được quản lý để thêm một đại diện nhưng tách biệt hồ sơ được quản lý sang thiết bị, nếu người dùng đã có tài khoản cá nhân. Các ứng dụng liên kết với hồ sơ được quản lý sẽ xuất hiện cùng các ứng dụng không được quản lý trong Trình chạy, màn hình gần đây và thông báo của người dùng.
Để bắt đầu quá trình cấp phép được quản lý, hãy gửi
ACTION_PROVISION_MANAGED_PROFILE
trong Intent
. Nếu
có thành công hay không, hệ thống sẽ kích hoạt
Lệnh gọi lại onProfileProvisioningComplete()
.
Sau đó, bạn có thể gọi setProfileEnabled()
để
bật hồ sơ được quản lý này.
Theo mặc định, chỉ một nhóm nhỏ ứng dụng được bật trong hồ sơ được quản lý.
Bạn có thể cài đặt thêm ứng dụng trong hồ sơ được quản lý bằng cách gọi
enableSystemApp()
.
Nếu đang phát triển ứng dụng Trình chạy, bạn có thể sử dụng lớp LauncherApps
mới để nhận danh sách các hoạt động có thể khởi chạy
cho người dùng hiện tại và mọi hồ sơ được quản lý đã liên kết. Trình chạy của bạn có thể giúp
các ứng dụng được quản lý trở nên nổi bật bằng cách thêm huy hiệu công việc vào biểu tượng
đối tượng có thể vẽ. Để truy xuất biểu tượng được gắn huy hiệu, hãy gọi
getUserBadgedIcon()
.
Để biết cách sử dụng chức năng mới, hãy tham khảo
Mẫu triển khai BasicManagedProfile
trong bản phát hành này.
Chủ sở hữu thiết bị
Android 5.0 mang đến khả năng triển khai ứng dụng của chủ sở hữu thiết bị. Một thiết bị
chủ sở hữu là một loại
quản trị viên thiết bị
có thêm khả năng tạo và xoá người dùng phụ cũng như
định cấu hình cài đặt chung trên thiết bị. Ứng dụng của chủ sở hữu thiết bị có thể sử dụng
trong lớp DevicePolicyManager
để lấy
kiểm soát chi tiết cấu hình, tính bảo mật và ứng dụng trên các thiết bị được quản lý.
Tại mỗi thời điểm, mỗi thiết bị chỉ có thể có một chủ sở hữu thiết bị đang hoạt động.
Để triển khai và kích hoạt chủ sở hữu thiết bị, bạn phải thực hiện chuyển dữ liệu NFC từ một ứng dụng lập trình đến thiết bị trong khi thiết bị không được cấp phép trạng thái. Quá trình chuyển dữ liệu này gửi cùng một thông tin như trong ý định cấp phép được mô tả trong phần Cấp phép được quản lý.
Ghim màn hình
Android 5.0 ra mắt API ghim màn hình mới cho phép bạn tạm thời hạn chế người dùng rời khỏi nhiệm vụ của bạn hoặc bị thông báo làm gián đoạn. Ví dụ: nếu bạn đang phát triển một ứng dụng giáo dục để hỗ trợ các yêu cầu đánh giá mang tính rủi ro cao trên Android, hoặc cho một mục đích duy nhất hay ứng dụng kiosk. Sau khi ứng dụng của bạn kích hoạt tính năng ghim màn hình, người dùng sẽ không thể xem thông báo, truy cập ứng dụng khác hoặc quay lại màn hình chính, cho đến khi ứng dụng của bạn thoát khỏi chế độ đó.
Có hai cách để kích hoạt tính năng ghim màn hình:
- Thủ công: Người dùng có thể bật tính năng ghim màn hình Cài đặt > Bảo mật > Ghim màn hình rồi chọn việc cần làm mà trẻ muốn ghim bằng cách chạm vào biểu tượng ghim màu xanh lục trên màn hình gần đây.
- Theo cách có lập trình: Để kích hoạt tính năng ghim màn hình
theo phương thức lập trình, hãy gọi
startLockTask()
khỏi ứng dụng của bạn. Nếu ứng dụng yêu cầu không phải là chủ sở hữu thiết bị, thì người dùng sẽ được nhắc để xác nhận. Ứng dụng của chủ sở hữu thiết bị có thể gọisetLockTaskPackages()
để cho phép ghim ứng dụng mà không cần bước xác nhận của người dùng.
Khi tính năng khoá tác vụ đang hoạt động, hành vi sau đây sẽ xảy ra:
- Thanh trạng thái trống, thông báo người dùng và thông tin trạng thái bị ẩn.
- Các nút Màn hình chính và Ứng dụng gần đây bị ẩn.
- Các ứng dụng khác không thể chạy hoạt động mới.
- Ứng dụng hiện tại có thể bắt đầu hoạt động mới, miễn là việc này không tạo công việc mới.
- Khi tính năng ghim màn hình được chủ sở hữu thiết bị gọi, người dùng sẽ vẫn bị khóa
cho ứng dụng của bạn cho đến khi ứng dụng gọi
stopLockTask()
. - Nếu tính năng ghim màn hình được một ứng dụng khác không phải chủ sở hữu thiết bị kích hoạt hoặc theo cách trực tiếp, người dùng có thể thoát bằng cách giữ cả nút Quay lại và nút Gần đây.
Khung in
Kết xuất tệp PDF dưới dạng bitmap
Giờ đây, bạn có thể kết xuất các trang tài liệu PDF thành hình ảnh bitmap để in bằng cách
bằng cách sử dụng lớp PdfRenderer
mới. Bạn phải chỉ định một
ParcelFileDescriptor
có thể tìm kiếm (tức là nội dung
truy cập ngẫu nhiên) trên đó hệ thống ghi nội dung có thể in được.
Ứng dụng của bạn có thể lấy một trang để kết xuất bằng
openPage()
, sau đó gọi
render()
để chuyển PdfRenderer.Page
đã mở thành một bitmap. Bạn
cũng có thể đặt các tham số bổ sung nếu bạn chỉ muốn chuyển đổi một phần
tài liệu vào hình ảnh bitmap (ví dụ: để triển khai
hiển thị theo ô cạnh nhau
để phóng to tài liệu).
Để biết ví dụ về cách sử dụng các API mới, hãy xem PdfRendererBasic
mẫu.
Hệ thống
Số liệu thống kê sử dụng ứng dụng
Giờ đây, bạn có thể truy cập vào nhật ký sử dụng ứng dụng trên thiết bị Android nhờ
API android.app.usage
mới. API này cung cấp thông tin sử dụng chi tiết hơn
khác với thông tin không được dùng nữa
getRecentTasks()
.
Để sử dụng API này, trước tiên bạn phải khai báo
Quyền "android.permission.PACKAGE_USAGE_STATS"
trong tệp kê khai.
Người dùng cũng phải cho phép truy cập vào ứng dụng này thông qua phần Cài đặt > Bảo mật > Ứng dụng
có quyền truy cập vào dữ liệu sử dụng.
Hệ thống thu thập dữ liệu sử dụng trên từng ứng dụng, tổng hợp dữ liệu theo khoảng thời gian hằng ngày, hằng tuần, hằng tháng và hằng năm. Thời lượng tối đa hệ thống lưu giữ dữ liệu này như sau:
- Dữ liệu hằng ngày: 7 ngày
- Dữ liệu hằng tuần: 4 tuần
- Dữ liệu hằng tháng: 6 tháng
- Dữ liệu hằng năm: 2 năm
Đối với mỗi ứng dụng, hệ thống sẽ ghi lại các dữ liệu sau:
- Lần gần đây nhất ứng dụng được sử dụng
- Tổng thời gian ứng dụng chạy ở nền trước trong khoảng thời gian đó (theo ngày, tuần, tháng hoặc năm)
- Dấu thời gian chụp khi một thành phần (được xác định theo tên gói và hoạt động) được di chuyển sang nền trước hoặc nền sau trong một ngày
- Dấu thời gian ghi lại thời điểm cấu hình thiết bị thay đổi (chẳng hạn như khi hướng thiết bị đã thay đổi do xoay)
Thử nghiệm và Hỗ trợ người khuyết tật
Kiểm thử và cải thiện khả năng hỗ trợ tiếp cận
Android 5.0 bổ sung thêm tính năng hỗ trợ sau đây cho việc kiểm thử và hỗ trợ tiếp cận:
getWindowAnimationFrameStats()
mới vàgetWindowContentFrameStats()
các phương thức ghi lại số liệu thống kê khung cho nội dung và ảnh động cửa sổ. Các phương thức này cho phép bạn viết chương trình kiểm thử đo lường để đánh giá xem ứng dụng có đang kết xuất khung hình ở tần suất làm mới đủ để mang lại trải nghiệm người dùng mượt mà.- Gói thuê bao mới
executeShellCommand()
cho phép bạn thực thi các lệnh shell từ kiểm thử đo lường. Chiến lược phát hành đĩa đơn quá trình thực thi lệnh tương tự như chạyadb shell
từ một máy chủ được kết nối với thiết bị, cho phép bạn sử dụng các công cụ dựa trên shell nhưdumpsys
,am
,content
vàpm
. - Dịch vụ hỗ trợ tiếp cận và công cụ kiểm thử sử dụng API hỗ trợ tiếp cận
(chẳng hạn như
UiAutomator
) truy xuất thông tin chi tiết về các thuộc tính của cửa sổ trên mà người dùng nhìn thấy có thể tương tác. Để truy xuất danh sáchAccessibilityWindowInfo
, hãy gọi phần tử mớigetWindows()
. AccessibilityNodeInfo.AccessibilityAction
mới cho phép bạn xác định các thao tác chuẩn hoặc thao tác tuỳ chỉnh để thực hiện trên mộtAccessibilityNodeInfo
AccessibilityNodeInfo.AccessibilityAction
mới thay thế các API liên quan đến thao tác đã tìm thấy trước đó trongAccessibilityNodeInfo
- Android 5.0 cung cấp khả năng kiểm soát chi tiết hơn đối với quá trình tổng hợp văn bản sang lời nói trong
ứng dụng của bạn. Lớp
Voice
mới cho phép ứng dụng của bạn sử dụng hồ sơ giọng nói liên quan đến các ngôn ngữ, chất lượng và độ trễ cụ thể và các thông số cụ thể của công cụ chuyển văn bản sang lời nói.
IME
Chuyển đổi dễ dàng hơn giữa các ngôn ngữ nhập
Kể từ Android 5.0, người dùng có thể dễ dàng chuyển đổi giữa
tất cả dữ liệu đầu vào
trình chỉnh sửa phương thức (IME) được nền tảng hỗ trợ. Thực hiện công việc được chỉ định
thao tác chuyển đổi (thường chạm vào biểu tượng Quả cầu trên bàn phím mềm) trong chu kỳ
thông qua tất cả các IME như vậy. Thay đổi về hành vi này được triển khai bởi
shouldOfferSwitchingToNextInputMethod()
.
Ngoài ra, khung này hiện sẽ kiểm tra xem IME tiếp theo có bao gồm
cơ chế chuyển đổi nào cả (và do đó, liệu IME đó có hỗ trợ chuyển đổi sang
IME theo sau). Một
IME có cơ chế chuyển đổi sẽ không chuyển đổi sang IME nếu không có cơ chế chuyển đổi. Chiến dịch này
được triển khai bởi
switchToNextInputMethod()
.
Để xem ví dụ về cách sử dụng các API chuyển đổi IME đã cập nhật, hãy tham khảo mẫu triển khai bàn phím mềm đã cập nhật trong bản phát hành này. Để tìm hiểu thêm về cách triển khai quá trình chuyển đổi giữa các IME, hãy xem Tạo phương thức nhập.
Nội dung khai báo trong tệp kê khai
Các tính năng bắt buộc có thể khai báo
Các giá trị sau hiện đã được hỗ trợ trong
<uses-feature>
để bạn có thể đảm bảo rằng ứng dụng của mình chỉ được cài đặt trên các thiết bị
cung cấp các tính năng mà ứng dụng của bạn cần.
FEATURE_AUDIO_OUTPUT
FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING
FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR
FEATURE_CAMERA_CAPABILITY_RAW
FEATURE_CAMERA_LEVEL_FULL
FEATURE_GAMEPAD
FEATURE_LIVE_TV
FEATURE_MANAGED_USERS
FEATURE_LEANBACK
FEATURE_OPENGLES_EXTENSION_PACK
FEATURE_SECURELY_REMOVES_USERS
FEATURE_SENSOR_AMBIENT_TEMPERATURE
FEATURE_SENSOR_HEART_RATE_ECG
FEATURE_SENSOR_RELATIVE_HUMIDITY
FEATURE_VERIFIED_BOOT
FEATURE_WEBVIEW
Quyền của người dùng
Quyền sau đây hiện được hỗ trợ trong
<uses-permission>
để khai báo các quyền mà ứng dụng của bạn yêu cầu để truy cập vào một số API.
BIND_DREAM_SERVICE
: Khi nhắm mục tiêu API cấp 21 trở lên, thì quyền này là yêu cầu của Dịch vụ Daydream, để đảm bảo rằng chỉ hệ thống mới có thể liên kết với tệp đó.