Tổng quan về các tính năng và API

Android 11 mang đến cho nhà phát triển các tính năng và API mới tuyệt vời. Các phần dưới đây giúp bạn tìm hiểu các tính năng cho ứng dụng cũng như làm quen với các API liên quan.

Để biết danh sách chi tiết về các API mới, đã được sửa đổi, cũng như đã bị xoá, hãy đọc báo cáo điểm khác biệt về API. Để biết thông tin chi tiết về các API mới, vui lòng truy cập tài liệu tham khảo về API cho Android (các API mới được trình bày nổi bật). Ngoài ra, để tìm hiểu những thay đổi của nền tảng có thể ảnh hưởng đến ứng dụng của bạn, hãy nhớ tham khảo các thay đổi về hành vi của Android 11 đối với ứng dụng nhắm đến Android Rtất cả ứng dụng, cũng như các thay đổi về quyền riêng tư.

Trải nghiệm mới

Điều khiển thiết bị

Android 11 có một API ControlsProviderService mới mà bạn có thể dùng để hiển thị các chế độ điều khiển cho các thiết bị bên ngoài đã kết nối. Các chế độ điều khiển này xuất hiện trong phần Device controls (Điều khiển thiết bị) trên trình đơn nguồn của Android. Để biết thêm thông tin, hãy xem phần Điều khiển các thiết bị bên ngoài.

Điều khiển nội dung nghe nhìn

Android 11 cập nhật cách hiển thị các chế độ điều khiển nội dung nghe nhìn. Các nút điều khiển nội dung nghe nhìn sẽ xuất hiện gần phần cài đặt nhanh. Các phiên hoạt động trên nhiều ứng dụng được sắp xếp trong một băng chuyền có thể vuốt, bao gồm các luồng phát trên điện thoại, các luồng từ xa (chẳng hạn như các luồng phát được phát hiện trên thiết bị bên ngoài hoặc phiên truyền và các phiên trước đó có thể tiếp tục) theo thứ tự phát gần đây nhất.

Người dùng có thể khởi động lại các phiên trước đó từ băng chuyền mà không phải khởi động ứng dụng. Khi bắt đầu phát, người dùng sẽ tương tác với các chế độ điều khiển nội dung nghe nhìn theo cách thông thường.

Để biết thêm thông tin, hãy xem phần điều khiển nội dung nghe nhìn.

Màn hình

Hỗ trợ hiệu quả hơn cho chế độ hiển thị dạng thác nước

Android 11 cung cấp một số API để hỗ trợ màn hình dạng thác nước, màn hình hiển thị bao quanh cạnh của thiết bị. Những màn hình này được coi là một biến thể của màn hình có vết cắt trên màn hình. Các phương thức DisplayCutout.getSafeInset…() hiện có sẽ trả về phần lồng ghép an toàn để tránh các vùng thác nước cũng như vết cắt. Để hiển thị nội dung ứng dụng trong khu vực thác nước, hãy làm như sau:

  • Gọi DisplayCutout.getWaterfallInsets() để nhận kích thước chính xác của phần lồng ghép thác nước.

  • Đặt thuộc tính bố cục cửa sổ layoutInDisplayCutoutMode thành LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS để cho phép cửa sổ mở rộng vào vùng vết cắt và thác nước trên tất cả các cạnh của màn hình. Bạn phải đảm bảo rằng không có nội dung thiết yếu nào nằm trong vùng vết cắt hoặc thác nước.

Cảm biến góc bản lề và thiết bị có thể gập lại

Android 11 giúp các ứng dụng chạy trên các thiết bị có cấu hình màn hình dựa trên bản lề xác định góc của bản lề bằng cách cung cấp một cảm biến mới với TYPE_HINGE_ANGLE và một SensorEvent mới có thể theo dõi góc bản lề và cung cấp phép đo theo độ giữa hai phần tích hợp của thiết bị. Bạn có thể sử dụng các phép đo thô này để tạo ảnh động chi tiết khi người dùng thao tác trên thiết bị.

Hãy xem phần Thiết bị có thể gập lại.

Cuộc trò chuyện

Cải thiện tính năng trò chuyện

Android 11 cải tiến cách xử lý cuộc trò chuyện. Cuộc trò chuyện là hoạt động giao tiếp hai chiều, theo thời gian thực giữa hai người trở lên. Những cuộc trò chuyện này có sự nổi bật đặc biệt và người dùng có một số lựa chọn mới để tương tác với những cuộc trò chuyện đó.

Để biết thêm thông tin về cuộc trò chuyện và cách ứng dụng của bạn có thể hỗ trợ cuộc trò chuyện, hãy xem bài viết Con người và cuộc trò chuyện.

Bong bóng trò chuyện

Bong bóng trò chuyện hiện có sẵn cho nhà phát triển để giúp hiển thị các cuộc trò chuyện trên toàn hệ thống. Bong bóng trò chuyện là một tính năng thử nghiệm trong Android 10 được bật thông qua tuỳ chọn dành cho nhà phát triển; trong Android 11, điều này không còn cần thiết nữa.

Nếu một ứng dụng nhắm đến Android 11 (API cấp 30) trở lên, thì thông báo của ứng dụng đó sẽ không được trình bày dưới dạng bong bóng trò chuyện trừ phi đáp ứng các yêu cầu mới về cuộc trò chuyện. Cụ thể, thông báo phải được liên kết với một lối tắt.

Trước Android 11, nếu muốn thông báo được tạo bong bóng trò chuyện, bạn cần chỉ định rõ ràng rằng thông báo được thiết lập để luôn chạy ở chế độ giao diện người dùng của tài liệu. Kể từ Android 11, bạn không cần phải chỉ định rõ ràng chế độ cài đặt đó nữa; nếu thông báo ở dạng bong bóng trò chuyện, nền tảng sẽ tự động đặt thông báo để luôn chạy ở chế độ giao diện người dùng tài liệu.

Có một số điểm cải tiến đối với hiệu suất bong bóng trò chuyện và người dùng có thể linh hoạt hơn trong việc bật và tắt bong bóng trò chuyện của từng ứng dụng. Đối với các nhà phát triển đã triển khai hỗ trợ thử nghiệm, có một vài thay đổi đối với các API trong Android 11:

Chỉ báo trực quan về mạng 5G

Để biết thông tin về cách hiển thị chỉ báo 5G trên thiết bị của người dùng, hãy xem phần Thông báo cho người dùng khi họ sử dụng 5G.

Quyền riêng tư

Android 11 đưa ra nhiều thay đổi và hạn chế để tăng cường khả năng bảo vệ quyền riêng tư của người dùng. Để tìm hiểu thêm, hãy xem trang Quyền riêng tư.

Bảo mật

Tin cập nhật về phương thức xác thực bằng hệ thống nhận dạng sinh trắc học

Để giúp bạn kiểm soát mức độ bảo mật của dữ liệu ứng dụng, Android 11 cung cấp một số điểm cải tiến đối với tính năng xác thực bằng sinh trắc học. Những thay đổi này cũng xuất hiện trong thư viện Sinh trắc học Jetpack.

Loại xác thực

Android 11 ra mắt giao diện BiometricManager.Authenticators. Bạn có thể dùng giao diện này để khai báo các loại xác thực mà ứng dụng của mình hỗ trợ.

Xác định loại xác thực được sử dụng

Sau khi người dùng xác thực, bạn có thể kiểm tra xem người dùng được xác thực bằng thông tin đăng nhập thiết bị hay thông tin xác thực sinh trắc học bằng cách gọi getAuthenticationType().

Hỗ trợ bổ sung cho khoá xác thực cho mỗi lần sử dụng

Android 11 hỗ trợ thêm cho tính năng xác thực bằng khoá xác thực cho mỗi lần sử dụng.

Các phương thức ngừng hoạt động

Android 11 ngừng sử dụng các phương thức sau:

  • Phương thức setDeviceCredentialAllowed().
  • Phương thức setUserAuthenticationValidityDurationSeconds().
  • Phiên bản nạp chồng của canAuthenticate() không nhận đối số.

Chia sẻ an toàn các tập dữ liệu lớn

Trong một số trường hợp, chẳng hạn như những tập dữ liệu liên quan đến công nghệ học máy hoặc phát nội dung nghe nhìn, ứng dụng của bạn có thể muốn sử dụng cùng một tập dữ liệu lớn như một ứng dụng khác. Trong các phiên bản Android trước, ứng dụng của bạn và một ứng dụng khác cần tải một bản sao riêng của cùng một tập dữ liệu xuống.

Để giúp giảm tình trạng dư thừa dữ liệu, cả trên mạng và trên ổ đĩa, Android 11 cho phép các tập dữ liệu lớn này được lưu vào bộ nhớ đệm trên thiết bị bằng cách sử dụng các blob dữ liệu dùng chung. Để tìm hiểu thêm về cách chia sẻ tập dữ liệu, hãy xem hướng dẫn chuyên sâu về cách chia sẻ tập dữ liệu lớn.

Thực hiện mã hoá dựa trên tệp sau khi khởi động lại OTA mà không cần thông tin xác thực của người dùng

Sau khi thiết bị hoàn tất quá trình cập nhật OTA và khởi động lại, các Khoá mã hoá thông tin xác thực (CE) được đặt trong bộ nhớ được bảo vệ bằng thông tin xác thực sẽ ngay lập tức xuất hiện cho các thao tác Mã hoá dựa trên tệp (FBE). Điều này có nghĩa là sau khi cập nhật OTA, ứng dụng của bạn có thể tiếp tục các hoạt động yêu cầu khoá CE trước khi người dùng nhập mã PIN, hình mở khoá hoặc mật khẩu.

Hiệu suất và chất lượng

Gỡ lỗi qua Wi-Fi

Android 11 hỗ trợ tính năng triển khai và gỡ lỗi ứng dụng không dây từ máy trạm thông qua Cầu gỡ lỗi Android (adb). Ví dụ: bạn có thể triển khai ứng dụng có thể gỡ lỗi cho nhiều thiết bị từ xa mà không cần kết nối vật lý với thiết bị qua USB hay gặp phải các vấn đề phổ biến khi kết nối USB (chẳng hạn như lỗi cài đặt trình điều khiển). Để biết thêm thông tin, hãy xem bài viết Chạy ứng dụng trên thiết bị phần cứng.

Cài đặt APK gia tăng ADB

Việc cài đặt các tệp APK lớn (2 GB trở lên) trên thiết bị có thể mất nhiều thời gian, ngay cả khi chỉ có thay đổi nhỏ đối với ứng dụng. Quá trình cài đặt tệp APK gia tăng ADB (Cầu gỡ lỗi Android) giúp đẩy nhanh quá trình này bằng cách cài đặt đủ tệp APK để khởi chạy ứng dụng trong khi truyền trực tuyến dữ liệu còn lại trong nền. adb install sẽ tự động sử dụng tính năng này nếu thiết bị hỗ trợ tính năng này và bạn đã cài đặt Công cụ nền tảng SDK mới nhất. Nếu phương thức này không được hỗ trợ, phương thức cài đặt mặc định sẽ được tự động sử dụng.

Hãy sử dụng lệnh adb sau để sử dụng tính năng này. Nếu thiết bị không hỗ trợ chế độ cài đặt tăng dần, thì lệnh sẽ không thành công và in ra nội dung giải thích chi tiết.

adb install --incremental

Trước khi chạy cài đặt APK gia tăng ADB, bạn phải ký APK và tạo một tệp APK Signature Scheme v4. Tệp chữ ký v4 phải được đặt bên cạnh tệp APK để tính năng này hoạt động.

Phát hiện lỗi bằng trình phân bổ bộ nhớ gốc

GWP-ASan là tính năng trình phân bổ bộ nhớ gốc giúp tìm các lỗi use-after-free và heap-buffer-overflow. Bạn có thể bật tính năng này trên toàn cầu hoặc cho các quy trình phụ cụ thể của ứng dụng. Để tìm hiểu thêm, hãy xem Hướng dẫn về GWP-Asan.

Neural Networks API 1.3

Android 11 mở rộng và cải thiện Neural Networks API (NNAPI).

Toán tử mới

NNAPI 1.3 giới thiệu một loại toán hạng mới là TENSOR_QUANT8_ASYMM_SIGNED để hỗ trợ lược đồ lượng tử hoá mới của TensorFlow Lite.

Ngoài ra, NNAPI 1.3 còn giới thiệu các toán tử mới sau:

  • QUANTIZED_LSTM
  • IF
  • WHILE
  • ELU
  • HARD_SWISH
  • FILL
  • RANK

Chế độ kiểm soát mới cho công nghệ học máy

NNAPI 1.3 giới thiệu các chế độ điều khiển mới để giúp quá trình học máy hoạt động trơn tru:

API Nhiệt NDK

Khi trở nên quá nóng, thiết bị có thể điều tiết CPU và/hoặc GPU, gây ảnh hưởng không mong muốn đến ứng dụng. Các ứng dụng hoặc trò chơi tích hợp đồ hoạ phức tạp, tác vụ tính toán nặng hoặc hoạt động mạng được duy trì liên tục có nhiều khả năng gặp phải sự cố hơn.

Sử dụng API Nhiệt NDK trong Android 11 để theo dõi sự thay đổi về nhiệt độ trên thiết bị, sau đó thực hiện hành động để duy trì mức sử dụng điện năng thấp hơn và nhiệt độ thiết bị mát hơn. API này tương tự như API Nhiệt Java; bạn có thể sử dụng API này để nhận thông báo về mọi sự thay đổi trạng thái nhiệt hoặc để thăm dò trực tiếp trạng thái hiện tại.

Văn bản và phương thức nhập

Cải thiện hiệu ứng chuyển đổi IME

Android 11 giới thiệu các API mới để cải thiện hiệu ứng chuyển đổi cho trình chỉnh sửa phương thức nhập (IME), chẳng hạn như bàn phím ảo. Các API này giúp bạn dễ dàng điều chỉnh nội dung ứng dụng được đồng bộ hoá với sự xuất hiện và biến mất của IME cũng như với các phần tử khác như trạng thái và thanh điều hướng.

Để hiển thị một IME trong khi bất kỳ EditText nào có tiêu điểm, hãy gọi view.getInsetsController().show(Type.ime()). (Bạn có thể gọi phương thức này trên bất kỳ khung hiển thị nào trong cùng hệ phân cấp với EditText được tập trung, bạn không phải gọi phương thức này riêng trên EditText.) Để ẩn IME, hãy gọi view.getInsetsController().hide(Type.ime()). Bạn có thể kiểm tra xem một IME có hiển thị hiện tại hay không bằng cách gọi view.getRootWindowInsets().isVisible(Type.ime()).

Để đồng bộ hoá khung hiển thị của ứng dụng với sự xuất hiện và biến mất của IME, hãy thiết lập một trình nghe trên một khung hiển thị bằng cách cung cấp WindowInsetsAnimation.Callback cho View.setWindowInsetsAnimationCallback(). (Bạn có thể thiết lập trình nghe này trên bất kỳ khung hiển thị nào, không nhất thiết phải là EditText.) IME gọi phương thức onPrepare() của trình nghe, sau đó gọi onStart() khi bắt đầu quá trình chuyển đổi. Sau đó, hàm này sẽ gọi onProgress() tại mỗi tiến trình trong quá trình chuyển đổi. Khi quá trình chuyển đổi hoàn tất, IME sẽ gọi onEnd(). Tại bất kỳ thời điểm nào trong quá trình chuyển đổi, bạn có thể biết tiến trình của quá trình chuyển đổi bằng cách gọi WindowInsetsAnimation.getFraction().

Để biết ví dụ về cách sử dụng các API này, hãy xem mã mẫu WindowInsetsAnimation mới.

Kiểm soát ảnh động IME

Bạn cũng có thể kiểm soát ảnh động IME hoặc ảnh động của một thanh hệ thống khác, chẳng hạn như thanh điều hướng. Để thực hiện việc này, trước tiên hãy gọi setOnApplyWindowInsetsListener() để thiết lập trình nghe mới cho các thay đổi về phần lồng ghép cửa sổ:

Kotlin

rootView.setOnApplyWindowInsetsListener { rootView, windowInsets ->
    val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime())
    rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, 
                          barsIme.bottom)

      // We return the new WindowInsets.CONSUMED to stop the insets being
      // dispatched any further into the view hierarchy. This replaces the
      // deprecated WindowInsets.consumeSystemWindowInsets() and related
      // functions.
    WindowInsets.CONSUMED
}

Java

mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
   @Override
   public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {

       Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime());
       mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right,
                             barsIme.bottom);

      // We return the new WindowInsets.CONSUMED to stop the insets being
      // dispatched any further into the view hierarchy. This replaces the
      // deprecated WindowInsets.consumeSystemWindowInsets() and related
      // functions.
       return WindowInsets.CONSUMED;
   }
});

Để di chuyển IME hoặc thanh hệ thống khác, hãy gọi phương thức controlWindowInsetsAnimation() của trình điều khiển:

Kotlin

view.windowInsetsController.controlWindowInsetsAnimation(
       Type.ime(),
       1000,
       LinearInterpolator(),
       cancellationSignal,
       object : WindowInsetsAnimationControlListener() {
           fun onReady(controller: WindowInsetsAnimationController,
                         types: Int) {
               // update IME inset
             controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset),
                           1f /* alpha */, 0.1 /* fraction progress */)
           }
       }
);

Java

mRoot.getWindowInsetsController().controlWindowInsetsAnimation(
       Type.ime(), 1000, new LinearInterpolator(), cancellationSignal,
       new WindowInsetsAnimationControlListener() {
           @Override
           public void onReady(
                   @NonNull WindowInsetsAnimationController controller,
                   int types
                   ) {
                   // update IME inset
                   controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset),
                           1f /* alpha */, 0.1 /* fraction progress */);
           }

           @Override
           public void onCancelled() {}
       });

Nội dung cập nhật đối với thư viện ICU

Android 11 cập nhật gói android.icu để sử dụng phiên bản 66 của thư viện ICU, so với phiên bản 63 trong Android 10. Phiên bản thư viện mới bao gồm dữ liệu ngôn ngữ CLDR đã cập nhật và một số tính năng nâng cao để hỗ trợ quốc tế hoá trong Android.

Những thay đổi đáng chú ý trong các phiên bản thư viện mới bao gồm:

  • Nhiều API định dạng hiện hỗ trợ một loại đối tượng trả về mới mở rộng FormattedValue.
  • API LocaleMatcher được nâng cao bằng một lớp trình tạo, hỗ trợ loại java.util.Locale và lớp kết quả có dữ liệu bổ sung về kết quả trùng khớp.
  • Unicode 13 hiện đã được hỗ trợ.

Nội dung nghe nhìn

Phân bổ vùng đệm MediaCodec

Android 11 có một API MediaCodec mới giúp ứng dụng có nhiều quyền kiểm soát hơn khi phân bổ các vùng đệm đầu vào và đầu ra. Điều này giúp ứng dụng của bạn quản lý bộ nhớ hiệu quả hơn.

Lớp học mới:
Phương thức mới:

Ngoài ra, hành vi của 2 phương thức trong MediaCodec.Callback() đã thay đổi:

onInputBufferAvailable()
Thay vì gọi MediaCodec.getInputBuffer()MediaCodec.queueInputBuffer() cùng với chỉ mục, nếu được định cấu hình để sử dụng API Mô hình khối, các ứng dụng nên dùng MediaCodec.getQueueRequest cùng với chỉ mục, đính kèm LinearBlock/HardwareBuffer vào vị trí.
onOutputBufferAvailable()
Thay vì gọi MediaCodec.getOutputBuffer() kèm theo chỉ mục, các ứng dụng có thể sử dụng MediaCodec.getOutputFrame() cùng chỉ mục để tải đối tượng OutputFrame có nhiều thông tin hơn và vùng đệm LinearBlock/HardwareBuffer.

Giải mã độ trễ thấp trong MediaCodec

Android 11 tăng cường MediaCodec để hỗ trợ giải mã độ trễ thấp cho trò chơi và các ứng dụng khác theo thời gian thực. Bạn có thể kiểm tra xem một bộ mã hoá và giải mã có hỗ trợ giải mã độ trễ thấp hay không bằng cách truyền FEATURE_LowLatency đến MediaCodecInfo.CodecCapabilities.isFeatureSupported().

Để bật hoặc tắt tính năng giải mã độ trễ thấp, hãy làm theo một trong những cách sau:

Hàm AAudio mới AAudioStream_release()

Hàm AAudioStream_close() phát hành và đóng luồng âm thanh cùng lúc. Điều này có thể nguy hiểm. Nếu một quy trình khác cố gắng truy cập vào luồng sau khi đã đóng, thì quy trình đó sẽ gặp sự cố.

Hàm mới AAudioStream_release() giải phóng luồng nhưng không đóng luồng. Việc này sẽ giải phóng tài nguyên và khiến luồng ở trạng thái đã biết. Đối tượng này sẽ vẫn tồn tại cho đến khi bạn gọi AAudioStream_close().

API MediaParser

MediaParser là một API cấp thấp mới để trích xuất nội dung nghe nhìn. Giải pháp này linh hoạt hơn MediaExtractor và cung cấp thêm khả năng kiểm soát đối với chức năng trích xuất nội dung nghe nhìn.

Ghi âm từ thiết bị USB

Khi một ứng dụng không có quyền RECORD_AUDIO sử dụng UsbManager để yêu cầu quyền truy cập trực tiếp vào thiết bị âm thanh USB có khả năng ghi âm (chẳng hạn như tai nghe USB), một thông báo cảnh báo mới sẽ xuất hiện yêu cầu người dùng xác nhận quyền sử dụng thiết bị. Hệ thống sẽ bỏ qua mọi tuỳ chọn "luôn sử dụng", do đó, người dùng phải xác nhận cảnh báo và cấp quyền mỗi khi ứng dụng yêu cầu quyền truy cập.

Để tránh hành vi này, ứng dụng nên yêu cầu quyền RECORD_AUDIO.

Quyền truy cập micrô đồng thời

Android 11 thêm các phương thức mới vào API AudioRecord, MediaRecorderAAudioStream. Các phương thức này cho phép và vô hiệu hoá khả năng chụp đồng thời bất kể trường hợp sử dụng đã chọn. Xem bài viết Chia sẻ đầu vào âm thanh.

Nút chuyển đầu ra

Android 11 triển khai hành vi mới cho các ứng dụng sử dụng API Cast và Mediarouter.

Ngoài việc truy cập vào các tuỳ chọn truyền từ trong ứng dụng, các tuỳ chọn chuyển đổi cũng xuất hiện trong trình phát nội dung nghe nhìn trên hệ thống. Điều này giúp mang lại cho người dùng một hành trình liền mạch khi di chuyển giữa các thiết bị khi họ thay đổi ngữ cảnh xem và nghe, chẳng hạn như xem video trong nhà bếp so với trên điện thoại hoặc nghe âm thanh trong nhà hoặc ô tô. Hãy xem trình chuyển đổi đầu ra.

Khả năng kết nối

Cải tiến Passpoint của Wi-Fi

Để biết thông tin về các chức năng Passpoint được thêm vào Android 11, hãy xem phần Passpoint.

API đề xuất Wi-Fi đã được mở rộng

Android 11 mở rộng API Đề xuất Wi-Fi để tăng khả năng quản lý mạng của ứng dụng, bao gồm:

  • Các ứng dụng quản lý kết nối có thể quản lý mạng của riêng mình bằng cách cho phép yêu cầu ngắt kết nối.
  • Mạng điểm truy cập được tích hợp vào API đề xuất và có thể được đề xuất cho người dùng.
  • API Analytics cho phép bạn nhận thông tin về chất lượng của mạng.

Nội dung cập nhật về CallScreeningService

Kể từ Android 11, CallScreeningService có thể yêu cầu thông tin về trạng thái xác minh STIR/SHAKEN (verstat) cho các lệnh gọi đến. Thông tin này được cung cấp trong thông tin chi tiết về cuộc gọi cho các cuộc gọi đến.

Nếu CallScreeningService có quyền READ_CONTACTS, ứng dụng sẽ nhận được thông báo khi có cuộc gọi đến từ hoặc cuộc gọi đi đến một số trong danh bạ của người dùng.

Để biết thêm thông tin, hãy xem phần Ngăn chặn giả mạo tên nhận dạng người gọi.

Mở bản cập nhật API dành cho thiết bị di động

Để biết thông tin về tính năng hỗ trợ OMAPI trên Android 11 trở lên, hãy xem bài viết Mở tính năng hỗ trợ trình đọc API dành cho thiết bị di động.

VPN có hiệu suất cao

Các ứng dụng nhắm đến API cấp 30 trở lên hoặc đang chạy trên thiết bị đã chạy trên API cấp 29 trở lên có thể áp dụng IKEv2/IPs cho VPN cho cả VPN do người dùng định cấu hình và VPN dựa trên ứng dụng.

VPN chạy dựa trên hệ điều hành, giúp đơn giản hoá mã cần thiết để thiết lập kết nối VPN IKEv2/7 trong ứng dụng.

Kiểm soát quyền truy cập mạng theo mỗi quy trình

Để biết thông tin về cách bật quyền truy cập mạng trên cơ sở từng quy trình, hãy xem phần Quản lý mức sử dụng mạng.

Cho phép nhiều cấu hình Passpoint đã cài đặt có cùng một FQDN

Kể từ Android 11, bạn có thể sử dụng PasspointConfiguration.getUniqueId() để lấy giá trị nhận dạng duy nhất cho đối tượng PasspointConfiguration. Đối tượng này cho phép người dùng ứng dụng cài đặt nhiều hồ sơ có cùng một tên miền đủ điều kiện (FQDN).

Chức năng này rất hữu ích khi nhà mạng triển khai nhiều tổ hợp Mã quốc gia di động (MCC) và Mã mạng di động (MNC) trên mạng, nhưng chỉ có một FQDN duy nhất. Trên Android 11 trở lên, bạn có thể cài đặt nhiều hồ sơ có cùng một FQDN khớp với mạng như nhà cung cấp Home khi người dùng cài đặt SIM có MCC hoặc MNC.

Hỗ trợ ăng-ten GNSS

Android 11 giới thiệu lớp GnssAntennaInfo, giúp ứng dụng của bạn có thể tận dụng tính năng định vị độ chính xác theo centimet mà Hệ thống vệ tinh điều hướng toàn cầu (GNSS) có thể cung cấp.

Tìm hiểu thêm trong hướng dẫn về thông tin hiệu chỉnh ăng-ten.

Đồ hoạ

Bộ giải mã hình ảnh NDK

API ImageDecoder của NDK cung cấp API tiêu chuẩn cho các ứng dụng Android C/C++ để giải mã hình ảnh trực tiếp. Nhà phát triển ứng dụng không cần sử dụng API khung (thông qua JNI) hoặc gói thư viện giải mã hình ảnh của bên thứ ba nữa. Để biết thêm thông tin, hãy xem Hướng dẫn cho nhà phát triển bộ giải mã hình ảnh.

API tốc độ khung hình

Android 11 cung cấp một API cho phép các ứng dụng thông báo cho hệ thống về tốc độ khung hình dự kiến, để giảm hiện tượng giật trên những thiết bị hỗ trợ nhiều tốc độ làm mới. Để biết thông tin về cách sử dụng API này, vui lòng xem bài viết Hướng dẫn về tốc độ khung hình.

Yêu cầu và kiểm tra dịch vụ hỗ trợ độ trễ thấp

Một số màn hình có thể xử lý hậu kỳ đồ hoạ, chẳng hạn như một số màn hình và TV bên ngoài. Quá trình xử lý hậu kỳ này giúp cải thiện đồ hoạ nhưng có thể làm tăng độ trễ. Các màn hình mới hơn hỗ trợ HDMI 2.1 có chế độ độ trễ thấp tự động (ALLM, còn gọi là chế độ trò chơi), giúp giảm thiểu độ trễ bằng cách tắt tính năng xử lý hậu kỳ này. Để biết thêm thông tin chi tiết về TẤT CẢM, hãy tham khảo Thông số kỹ thuật HDMI 2.1.

Một cửa sổ có thể yêu cầu sử dụng chế độ tự động độ trễ thấp (nếu có). AllM đặc biệt hữu ích cho các ứng dụng như trò chơi và hội nghị truyền hình, trong đó độ trễ thấp quan trọng hơn việc có đồ hoạ tốt nhất có thể.

Để bật/tắt ít công cụ xử lý hậu kỳ, hãy gọi Window.setPreferMinimalPostProcessing() hoặc đặt thuộc tính preferMinimalPostProcessing của cửa sổ thành true. Không phải màn hình nào cũng hỗ trợ xử lý hậu kỳ tối thiểu; để tìm hiểu xem một màn hình cụ thể có hỗ trợ tính năng này hay không, hãy gọi phương thức mới Display.isMinimalPostProcessingSupported().

Chèn lớp gỡ lỗi đồ hoạ hiệu suất

Giờ đây, các ứng dụng có thể tải các lớp đồ hoạ bên ngoài (GLES, Vulkan) vào mã ứng dụng gốc để hiển thị chức năng tương tự như ứng dụng có thể gỡ lỗi mà không làm phát sinh hao tổn hiệu suất. Tính năng này đặc biệt quan trọng khi phân tích ứng dụng của bạn bằng các công cụ như GAPID. Để phân tích tài nguyên cho ứng dụng của bạn, hãy thêm phần tử siêu dữ liệu sau đây vào tệp kê khai ứng dụng thay vì đặt ứng dụng ở chế độ có thể gỡ lỗi:

<application ... >
    <meta-data android:name="com.android.graphics.injectLayers.enable"
                  android:value="true" />
</application>

Hình ảnh và máy ảnh

Tắt tiếng thông báo và chế độ rung trong khi chụp ảnh đang diễn ra

Kể từ Android 11, khi đang dùng máy ảnh, ứng dụng của bạn chỉ có thể tắt tiếng rung, cả âm thanh và chế độ rung, hoặc không sử dụng setCameraAudioRestriction().

Hỗ trợ máy ảnh mở rộng trong Trình mô phỏng Android

Để biết thông tin về tính năng hỗ trợ mở rộng cho máy ảnh trong trình mô phỏng kể từ Android 11, hãy xem nội dung Hỗ trợ máy ảnh.

Hỗ trợ sử dụng đồng thời nhiều máy ảnh

Android 11 bổ sung các API để hỗ trợ truy vấn việc sử dụng nhiều máy ảnh cùng một lúc, bao gồm cả máy ảnh mặt trước và máy ảnh mặt sau.

Để kiểm tra khả năng hỗ trợ trên thiết bị mà ứng dụng của bạn đang chạy, hãy sử dụng các phương thức sau:

  • getConcurrentCameraIds() trả về Set tổ hợp mã nhận dạng máy ảnh có thể truyền phát đồng thời với các tổ hợp luồng được đảm bảo khi được định cấu hình trong cùng một quy trình đăng ký.
  • isConcurrentSessionConfigurationSupported() truy vấn xem thiết bị máy ảnh có thể đồng thời hỗ trợ các cấu hình của phiên tương ứng hay không.

Hỗ trợ tốt hơn cho hình ảnh HEIF có nhiều khung hình

Kể từ Android 11, nếu bạn gọi ImageDecoder.decodeDrawable() và truyền một hình ảnh HEIF chứa một chuỗi khung (chẳng hạn như ảnh động hoặc một loạt ảnh), thì phương thức này sẽ trả về một AnimatedImageDrawable chứa toàn bộ chuỗi hình ảnh. Trên các phiên bản Android trước đây, phương thức này trả về BitmapDrawable chỉ là một khung duy nhất.

Nếu đồ hoạ HEIF chứa nhiều khung không theo trình tự, bạn có thể truy xuất một khung riêng lẻ bằng cách gọi MediaMetadataRetriever.getImageAtIndex().

Hỗ trợ tiếp cận

Thông tin cập nhật dành cho nhà phát triển dịch vụ hỗ trợ tiếp cận

Nếu tạo dịch vụ hỗ trợ tiếp cận tuỳ chỉnh, bạn có thể sử dụng các tính năng sau trong Android 11:

  • Tính năng giải thích dành cho người dùng về một dịch vụ hỗ trợ tiếp cận hiện cho phép sử dụng HTML và hình ảnh ngoài văn bản thuần tuý. Tính linh hoạt này giúp người dùng cuối dễ dàng giải thích cho họ về chức năng và lợi ích của dịch vụ đó.
  • Để xử lý phần mô tả trạng thái của một thành phần trên giao diện người dùng có ý nghĩa ngữ nghĩa hơn contentDescription, hãy gọi phương thức getStateDescription().
  • Để yêu cầu các sự kiện chạm bỏ qua trình khám phá thao tác chạm của hệ thống, hãy gọi setTouchExplorationPassthroughRegion(). Tương tự, để yêu cầu các cử chỉ bỏ qua trình phát hiện cử chỉ của hệ thống, hãy gọi setGestureDetectionPassthroughRegion().
  • Bạn có thể yêu cầu các thao tác IME, chẳng hạn như "Enter" và "next", cũng như ảnh chụp màn hình của những cửa sổ không bật cờ FLAG_SECURE.

Các tính năng khác

Lý do thoát khỏi quy trình ứng dụng

Android 11 giới thiệu phương thức ActivityManager.getHistoricalProcessExitReasons() để báo cáo lý do cho mọi trường hợp chấm dứt quy trình gần đây. Các ứng dụng có thể sử dụng phương thức này để thu thập thông tin chẩn đoán sự cố, chẳng hạn như liệu việc chấm dứt một quá trình có phải do lỗi ANR, vấn đề về bộ nhớ hay lý do khác hay không. Ngoài ra, bạn có thể sử dụng phương thức setProcessStateSummary() mới để lưu trữ thông tin trạng thái tuỳ chỉnh nhằm mục đích phân tích sau này.

Phương thức getHistoricalProcessExitReasons() trả về các thực thể của lớp ApplicationExitInfo, chứa thông tin liên quan đến sự kiện bị buộc tắt. Bằng cách gọi getReason() trên một thực thể của lớp này, bạn có thể xác định lý do khiến quy trình của ứng dụng bị dừng. Ví dụ: giá trị trả về của REASON_CRASH cho biết đã xảy ra một ngoại lệ chưa được xử lý trong ứng dụng của bạn. Nếu cần đảm bảo tính duy nhất cho các sự kiện thoát, ứng dụng của bạn có thể duy trì giá trị nhận dạng dành riêng cho ứng dụng, chẳng hạn như giá trị băm dựa trên dấu thời gian của phương thức getTimestamp().

Tài nguyên khác

Để biết thêm thông tin, hãy đọc bài viết về các công cụ mới trên Android 11 giúp tăng tính riêng tư và ổn định cho ứng dụng trên Medium.

Trình tải tài nguyên

Android 11 giới thiệu một API mới cho phép các ứng dụng linh động mở rộng cách tìm kiếm và tải tài nguyên. Các lớp API mới ResourcesLoaderResourcesProvider chịu trách nhiệm chính trong việc cung cấp chức năng mới. Đồng thời, các tài sản này mang đến khả năng cung cấp tài nguyên và tài sản bổ sung, hoặc sửa đổi giá trị của tài nguyên và tài sản hiện có.

Đối tượng ResourcesLoader là các vùng chứa cung cấp đối tượng ResourcesProvider cho thực thể Resources của ứng dụng. Đổi lại, các đối tượng ResourcesProvider cung cấp các phương thức để tải dữ liệu tài nguyên từ tệp APK và bảng tài nguyên.

Một trường hợp sử dụng chính cho API này là tải thành phần tuỳ chỉnh. Bạn có thể sử dụng loadFromDirectory() để tạo một ResourcesProvider chuyển hướng độ phân giải của các tài nguyên và thành phần dựa trên tệp, khiến đối tượng này tìm kiếm một thư mục cụ thể thay vì tệp APK của ứng dụng. Bạn có thể truy cập vào các tài sản này thông qua nhóm phương thức open() từ lớp API AssetManager, giống như các tài sản được đóng gói trong tệp APK.

Lược đồ chữ ký APK phiên bản 4

Android 11 hỗ trợ thêm Lược đồ chữ ký APK v4. Giao thức này tạo ra một loại chữ ký mới trong một tệp riêng biệt (apk-name.apk.idsig) nhưng mặt khác cũng tương tự như v2 và v3. Không có thay đổi nào đối với APK. Giao thức này hỗ trợ cài đặt APK gia tăng ADB, giúp tăng tốc quá trình cài đặt APK.

Bộ lọc ý định động

Để nhận được ý định, tại thời điểm biên dịch, ứng dụng phải khai báo loại dữ liệu mà ứng dụng có thể nhận được bằng cách xác định một bộ lọc ý định trong tệp kê khai ứng dụng. Trên Android 10 trở xuống, các ứng dụng không có cách nào để thay đổi bộ lọc ý định trong thời gian chạy. Đây là vấn đề đối với các ứng dụng ảo hoá (chẳng hạn như máy ảo và máy tính từ xa) vì các ứng dụng này không có cách nào để biết chính xác người dùng sẽ cài đặt phần mềm nào bên trong.

Android 11 giới thiệu các nhóm MIME, một phần tử tệp kê khai mới cho phép ứng dụng khai báo tập hợp động các loại MIME trong bộ lọc ý định và sửa đổi tập hợp loại MIME động trong thời gian chạy. Để sử dụng một nhóm MIME, hãy đưa một phần tử dữ liệu vào tệp kê khai ứng dụng với thuộc tính android:mimeGroup mới:

<intent-filter>
  <action android:name="android.intent.action.SEND"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeGroup="myMimeGroup"/>
</intent-filter>

Giá trị của thuộc tính android:mimeGroup là một mã nhận dạng chuỗi tuỳ ý giúp xác định nhóm MIME trong thời gian chạy. Bạn có thể truy cập và cập nhật nội dung của một nhóm MIME bằng cách chuyển mã nhận dạng của nhóm đó đến các phương thức mới sau đây trong lớp API PackageManager:

Khi bạn thêm một loại MIME vào nhóm MIME theo phương thức lập trình, loại MIME này hoạt động hoàn toàn giống với loại MIME tĩnh được khai báo rõ ràng trong tệp kê khai.

Các tính năng nâng cao cho tính năng tự động điền

Android 11 giới thiệu các điểm cải tiến cho dịch vụ tự động điền.

Giá trị nhận dạng gợi ý trong AssistStructure.ViewNode

Thường thì dịch vụ tự động điền sẽ tính toán hàm băm chữ ký cho một khung hiển thị dựa trên các thuộc tính của khung hiển thị đó. Gợi ý khung hiển thị là một thuộc tính đặc biệt phù hợp khi tính toán hàm băm chữ ký, nhưng chuỗi gợi ý có thể thay đổi theo ngôn ngữ của điện thoại. Để giải quyết vấn đề này, Android 11 mở rộng AssistStructure.ViewNode bằng phương thức getHintIdEntry() mới. Phương thức này sẽ trả về giá trị nhận dạng tài nguyên cho văn bản gợi ý của khung hiển thị. Phương thức này cung cấp một giá trị độc lập với ngôn ngữ mà bạn có thể dùng để tính toán các hàm băm chữ ký.

Tập dữ liệu sự kiện đã hiển thị

Để giúp các dịch vụ tự động điền cải thiện các đề xuất, Android 11 cung cấp cách xác định các trường hợp mà dịch vụ tự động điền đưa ra tập dữ liệu nhưng người dùng không chọn tập dữ liệu nào. Trong Android 11, FillEventHistory sẽ báo cáo một loại sự kiện TYPE_DATASETS_SHOWN mới. FillEventHistory ghi lại một sự kiện thuộc loại này bất cứ khi nào dịch vụ tự động điền trình bày một hoặc nhiều tập dữ liệu cho người dùng. Dịch vụ tự động điền có thể dùng những sự kiện này cùng với sự kiện TYPE_DATASET_SELECTED hiện có để xác định xem người dùng có chọn tuỳ chọn tự động điền đã cung cấp hay không.

Tích hợp IME

Giờ đây, bàn phím và các IME khác có thể hiển thị các đề xuất tự động điền cùng dòng trong một dải đề xuất hoặc giao diện tương tự, thay vì trong trình đơn thả xuống. Để bảo vệ thông tin nhạy cảm như mật khẩu và số thẻ tín dụng, các đề xuất sẽ hiển thị cho người dùng nhưng IME không biết cho đến khi người dùng chọn một đề xuất. Để biết thông tin về cách IME và trình quản lý mật khẩu có thể hỗ trợ tính năng này, hãy xem phần Tích hợp tính năng tự động điền với bàn phím.

Chia sẻ dữ liệu với dịch vụ ghi nội dung

Kể từ Android 11, ứng dụng của bạn có thể chia sẻ dữ liệu với dịch vụ ghi lại nội dung của thiết bị. Chức năng này giúp thiết bị dễ dàng cung cấp thông tin thông minh theo ngữ cảnh, chẳng hạn như hiển thị tên của bài hát hiện đang phát trong môi trường của người dùng.

Để cung cấp dữ liệu từ ứng dụng của bạn cho dịch vụ ghi lại nội dung, hãy gọi phương thức shareData() trên một thực thể của ContentCaptureManager. Nếu hệ thống chấp nhận yêu cầu chia sẻ dữ liệu, thì ứng dụng của bạn sẽ nhận được chỉ số mô tả tệp chỉ ghi để chia sẻ với dịch vụ ghi lại nội dung.