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

Android 11 bổ sung chức năng hỗ trợ mạng 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 việc thêm chức năng dành riêng cho 5G vào ứng dụng có thể cải thiện trải nghiệm người dùng.

Xây dựng cho 5G

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

  • Tự động cải thiệ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 tài sản trò chơi có độ phân giải cao hơn.
  • 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 đưa vào những 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 những trải nghiệm dành riêng cho mạng 5G chỉ hoạt động với tốc độ cao và độ trễ thấp.

Chức năng 5G

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

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

NET_CAPABILITY_TEMPORARILY_NOT_METERED là một tính năng được thêm vào Android 11 để cho bạn biết liệu mạng bạn đang sử dụng có phải là mạng 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 được sử dụng cùng với NET_CAPABILITY_NOT_METERED. Cờ hiện có cho biết liệu một mạng luôn có đo lượng dữ liệu hay không và áp dụng cho cả kết nối di động và Wi-Fi.

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

Khi đã xác định rằng mạng hiện tại tạm thời hoặc vĩnh viễn không đo lượng dữ liệu, 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 của bạn.

Đă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() để biết thời điểm 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. Lệnh gọi lại trong tương lai rất quan trọng để ứ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 đ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ị 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 sử dụng 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 của mình dựa trên SDK Android 11.

  • Chức năng NET_CAPABILITY_NOT_METERED là vĩnh viễn trên mạng. Một mạng có tính năng này sẽ tự động ngắt kết nối nếu mạng đó mất tính năng này (trở thành mạ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 của 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ể dùng lệnh gọi API dựa trên lệnh gọi lại để phát hiện xem thiết bị có kết nối với mạng 5G hay không. Bạn có thể kiểm tra xem kết nối đó là mạng 5G NR (độc lập) hay NSA (không độc lập).

Có thể kể đến một số cách sử dụng lệnh gọi API này như:

  • 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 mang đến trải nghiệm 5G độc đáo.

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

  • Theo dõi các kết nối 5G 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 ngoại lệ là nếu nhà mạng chọn hiển thị 5G làm 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 giá trị:

Loại dữ liệu trả về Mạng
OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO LTE Pro LTE (5Ge) nâng cao
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

Thông tin ước tính băng thông sử dụng đối tượng NetworkCapabilities mà bạn xử lý khi xác định mức đo lượng dữ liệu. Bạn có thể nhận ước tính băng thông bằng cách sử dụ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 cải thiện trong Android 11 nhờ 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.

Mặc định băng thông chỉ cung cấp hướng dẫn khi khởi động ứng dụng. Điều này sẽ giúp bạn trong trường hợp "khởi động khi ở trạng thái rảnh". Ứng dụng của bạn phải đo lường những gì ứ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à linh hoạt điều chỉnh hành vi truyền trực tuyến của ứng dụng. Ví dụ: bạn có thể chọn độ phân giải của video để cung cấp dựa trên ước tính băng thông khi khởi động. Hãy tiếp tục kiểm tra kết quả ước tính khi người dùng sử dụng ứng dụng; vì loại kết nối và độ mạnh của họ thay đổi, nên hãy điều chỉnh hành vi của ứng dụng cho phù hợp.