API Android 5.0

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ành PRIORITY_MAX hoặc PRIORITY_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ới Camera 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 Camera2BasicCamera2Video 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 do MediaCodec 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 MediaSessionMediaController 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()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()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:

  1. Tạo ConnectivityManager.
  2. Sử dụng lớp NetworkRequest.Builder để tạo một đối tượng NetworkRequest 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.
  3. Để quét tìm các mạng phù hợp, hãy gọi requestNetwork() hoặc registerNetworkCallback() rồi chuyển vào Đối tượng NetworkRequest và cách triển khai ConnectivityManager.NetworkCallback. Sử dụng requestNetwork() 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ụng registerNetworkCallback().

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ùng setPreferredService() để 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ọi setLockTaskPackages() để 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ạy adb 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, contentpm.
  • 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ách AccessibilityWindowInfo, hãy gọi phần tử mới getWindows() .
  • 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ột AccessibilityNodeInfo AccessibilityNodeInfo.AccessibilityAction mới thay thế các API liên quan đến thao tác đã tìm thấy trước đó trong AccessibilityNodeInfo
  • 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.

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 đó.