Bổ sung chức năng 5G vào ứng dụng

Android 11 bổ sung chức năng hỗ trợ 5G trong các ứng dụng của bạn. Chủ đề này đề cập đến chức năng và cung cấp cho bạn thông tin tổng quan về cách để cải thiện trải nghiệm người dùng khi thêm chức năng dành riêng cho 5G vào ứng dụng.

Xây dựng cho mạng 5G

Khi quyết định cách tương tác với 5G, hãy nghĩ về loại trải nghiệm mà bạn đang cố gắng xây dựng. Sau đây là một số cách 5G có thể cải thiện ứng dụng của bạn:

  • Tự động mang đến các trải nghiệm hiện tại nhanh hơn và tốt hơn nhờ những cải tiến về tốc độ và độ trễ của 5G.
  • Nâng cấp trải nghiệm người dùng, chẳng hạn như bằng cách hiển thị video 4k hoặc tải các thành phần trò chơi có độ phân giải cao hơn xuống.
  • Sau khi xác nhận rằng việc tăng mức sử dụng dữ liệu sẽ không làm người dùng mất phí, hãy thêm vào các trải nghiệm thường chỉ được cung cấp qua Wi-Fi, chẳng hạn như chủ động tải nội dung thường dành riêng cho Wi-Fi không đo lượng dữ liệu.
  • Mang đến trải nghiệm độc đáo cho 5G, vốn chỉ hoạt động với tốc độ cao và độ trễ thấp.

Chức năng 5G

Android 11 ra mắt các thay đổi và tính năng nâng cao sau đây về chức năng:

Kiểm tra định mức

NET_CAPABILITY_TEMPORARILY_NOT_METERED là một tính năng được thêm vào Android 11. Tính năng này cho bạn biết liệu mạng bạn đang sử dụng có không đo lượng dữ liệu dựa trên thông tin do nhà mạng di động cung cấp hay không.

Cờ mới này được dùng cùng với NET_CAPABILITY_NOT_METERED. Cờ hiện có cho biết mạng luôn không đo lượng dữ liệu và áp dụng cho cả kết nối Wi-Fi và kết nối di động.

Sự khác biệt giữa 2 cờ là NET_CAPABILITY_TEMPORARILY_NOT_METERED có thể thay đổi mà không cần thay đổi loại mạng. Các ứng dụng nhắm đến Android 11 có thể sử dụng cờ NET_CAPABILITY_TEMPORARILY_NOT_METERED. Trên các thiết bị chạy Android 9 trở xuống, hệ điều hành sẽ không báo cáo về cờ. Đối với các ứng dụng chạy trên Android 10, cờ này có thể xuất hiện, tuỳ thuộc vào thiết bị mà cờ này đang chạy.

Khi bạn đã xác định rằng mạng hiện tại không đo lượng dữ liệu tạm thời hoặc vĩnh viễn, bạn có thể hiển thị nội dung có độ phân giải cao hơn (chẳng hạn như video 4k), tải nhật ký lên, sao lưu tệp và chủ động tải nội dung xuống.

Các phần sau đây trình bày các bước thêm tính năng kiểm tra đo lượng dữ liệu vào ứng dụng.

Đăng ký lệnh gọi lại mạng

Đăng ký lệnh gọi lại mạng bằng cách sử dụng ConnectivityManager.registerDefaultNetworkCallback() để nghe khi NetworkCapabilities thay đổi. Bạn có thể phát hiện các thay đổi đối với NetworkCapabilities bằng cách ghi đè phương thức onCapabilitiesChanged() trong NetworkCallback.

registerDefaultNetworkCallback() khiến lệnh gọi lại đã đăng ký kích hoạt ngay khi được đăng ký, cung cấp cho ứng dụng thông tin về trạng thái hiện tại. Các lệnh gọi lại trong tương lai là rất quan trọng để các ứng dụng có hành động thích hợp khi trạng thái thay đổi từ không đo lượng dữ liệu sang có đo lượng dữ liệu hoặc ngược lại.

Kiểm tra mức đo lượng dữ liệu

Sử dụng đối tượng NetworkCapabilites mà bạn nhận được trong lệnh gọi lại mạng để kiểm tra kết quả của mã sau:

Kotlin

NetworkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED) ||
  NetworkCapabilities.hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)

Java

NetworkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED) ||
  NetworkCapabilities.hasCapability(NET_CAPABILITY_TEMPORARILY_NOT_METERED)

Nếu giá trị này là true, thì bạn có thể coi mạng là không đo lượng dữ liệu.

Các yếu tố cần cân nhắc khác

Khi làm việc với chức năng này, hãy lưu ý những điều sau:

  • Để sử dụng cờ NET_CAPABILITY_TEMPORARILY_NOT_METERED, bạn phải biên dịch ứng dụng dựa trên SDK Android 11.

  • Tính năng NET_CAPABILITY_NOT_METERED có hiệu lực vĩnh viễn trên một mạng. Mạng có tính năng này sẽ tự động ngắt kết nối nếu mất tính năng (có đo lượng dữ liệu).

  • Ngược lại, NET_CAPABILITY_TEMPORARILY_NOT_METERED có thể thay đổi trên mạng mà không bị ngắt kết nối. Do đó, các ứng dụng phải theo dõi lệnh gọi lại onCapabilitiesChanged() để xử lý khi mạng trở về trạng thái có đo lượng dữ liệu (mất khả năng NET_CAPABILITY_TEMPORARILY_NOT_METERED).

  • Một mạng không thể có cả NET_CAPABILITY_NOT_METEREDNET_CAPABILITY_TEMPORARILY_NOT_METERED cùng lúc.

Phát hiện mạng 5G

Kể từ Android 11, bạn có thể phát hiện xem thiết bị có kết nối với mạng 5G hay không bằng cách sử dụng lệnh gọi API dựa trên lệnh gọi lại. Bạn có thể kiểm tra để biết kết nối là mạng 5G NR (độc lập) hay NSA (không độc lập).

Một số cách sử dụng cho lệnh gọi API này có thể bao gồm:

  • Hiển thị thương hiệu 5G trong ứng dụng của bạn để làm nổi bật rằng bạn đang cung cấp trải nghiệm 5G độc đáo.

  • Chỉ kích hoạt trải nghiệm 5G độc đáo trong ứng dụng khi đang dùng mạng 5G. Bạn nên ghép nối hoạt động kiểm tra trạng thái này với hoạt động kiểm tra mức đo lượng dữ liệu.

  • Theo dõi kết nối 5G để phục vụ cho mục đích phân tích.

Để kiểm thử khả năng phát hiện mạng 5G mà không cần thiết bị 5G, bạn có thể sử dụng các tính năng được thêm vào trình mô phỏng SDK Android.

Phát hiện mạng 5G

Gọi TelephonyManager.listen(), truyền vào LISTEN_DISPLAY_INFO_CHANGED để xác định xem người dùng có kết nối mạng 5G hay không. Ghi đè phương thức onDisplayInfoChanged() để xác định loại mạng dùng cho mục đích hiển thị. Có một trường hợp ngoại lệ là nếu nhà mạng chọn hiển thị 5G dưới dạng RAT cho mạng mmWave của họ, thì OVERRIDE_NETWORK_TYPE_NR_NSA sẽ được trả về.

Bảng sau đây hiển thị các mạng tương ứng với các giá trị:

Loại dữ liệu trả về Mạng
OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO LTE chuyên nghiệp nâng cao (5Ge)
OVERRIDE_NETWORK_TYPE_NR_NSA NR (5G) cho mạng 5G Sub-6
OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE (5G+/5G UW) cho mạng 5G mmWave

Ước tính băng thông

Tính năng ước tính băng thông sử dụng đối tượng NetworkCapabilities mà bạn sử dụng khi xác định mức đo lượng dữ liệu. Bạn có thể nhận thông tin ước tính về băng thông bằng đối tượng đó.

Độ tin cậy và độ chính xác của các phương thức ước tính băng thông getLinkDownstreamBandwidthKbps()getLinkUpstreamBandwidthKbps() cải thiện trong Android 11 nhờ việc nâng cấp tính năng hỗ trợ khung và các bản sửa lỗi nền tảng/modem để phù hợp với 5G.

Giá trị mặc định về băng thông chỉ cung cấp hướng dẫn về việc khởi động ứng dụng. Điều này sẽ giúp ích cho bạn trong trường hợp "khởi động khi ở trạng thái rảnh". Ứng dụng của bạn nên đo lường những nội dung mà ứng dụng nhìn thấy sau khi người dùng bắt đầu tương tác với ứng dụng và điều chỉnh hành vi truyền trực tuyến của ứng dụng một cách linh động. Ví dụ: bạn có thể chọn độ phân giải của video để cung cấp dựa trên thông tin ước tính về băng thông khi khởi động. Tiếp tục kiểm tra thông tin ước tính khi người dùng sử dụng ứng dụng. Khi loại kết nối và cường độ kết nối thay đổi, hãy điều chỉnh hành vi của ứng dụng sao cho phù hợp.