Quyền truy cập và đồng bộ hoá mạng trên Wear OS

Stay organized with collections Save and categorize content based on your preferences.

Với Wear OS by Google, đồng hồ có thể giao tiếp trực tiếp với mạng mà không cần quyền truy cập vào điện thoại Android hoặc iOS. Bạn không nên sử dụng API Lớp dữ liệu để kết nối mạng.

Quyền truy cập mạng

Ứng dụng Wear OS có thể thực hiện các yêu cầu về mạng. Khi đồng hồ có kết nối Bluetooth với điện thoại, lưu lượng truy cập mạng của đồng hồ thường sẽ được xử lý qua điện thoại.

Khi không có điện thoại, Wi-Fi và mạng di động sẽ được sử dụng, tuỳ thuộc vào phần cứng của đồng hồ. Nền tảng Wear OS sẽ xử lý quá trình chuyển đổi giữa các mạng.

Bạn có thể sử dụng các giao thức như HTTP, TCP và UDP. Tuy nhiên, các API android.webkit (bao gồm cả lớp CookieManager) sẽ không được cung cấp. Bạn có thể sử dụng cookie bằng cách đọc và ghi tiêu đề theo yêu cầu và phản hồi.

Bạn cũng nên sử dụng API WorkManager cho các yêu cầu không đồng bộ, bao gồm cả việc thăm dò ý kiến định kỳ.

Nếu bạn cần kết nối với các loại mạng cụ thể, hãy xem phần Đọc trạng thái mạng.

Truy cập mạng băng thông cao

Nền tảng Wear OS quản lý kết nối mạng với mục tiêu cung cấp trải nghiệm tổng thể tốt nhất cho người dùng. Nền tảng này chọn mạng đang hoạt động mặc định bằng cách cân bằng hai yếu tố:

  • Nhu cầu sử dụng pin trong thời gian dài.
  • Nhu cầu về băng thông mạng.

Khi việc bảo toàn pin được ưu tiên, mạng đang hoạt động có thể không đủ băng thông để thực hiện những tác vụ mạng yêu cầu băng thông cao, chẳng hạn như truyền tải các tệp lớn hoặc phát trực tuyến nội dung đa phương tiện.

Phần này đưa ra hướng dẫn về cách sử dụng lớp ConnectivityManager để đảm bảo ứng dụng của bạn có sẵn băng thông mạng cần thiết. Để biết thông tin chung về quyền kiểm soát chi tiết các tài nguyên mạng, hãy xem nội dung Quản lý mức sử dụng mạng.

Yêu cầu kết nối Wi-Fi

Đối với các trường hợp sử dụng yêu cầu quyền truy cập mạng băng thông cao, chẳng hạn như truyền tải các tệp lớn hoặc phát trực tuyến nội dung đa phương tiện, hãy yêu cầu kết nối với mạng truyền tải băng thông cao, chẳng hạn như Wi-Fi.

Kotlin

val callback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        // The Wi-Fi network has been acquired, bind it to use this network by default
        connectivityManager.bindProcessToNetwork(network)
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        // The Wi-Fi network has been disconnected
    }
}
connectivityManager.requestNetwork(
    NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
    callback
)

Java

ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {
    public void onAvailable(Network network) {
        super.onAvailable(network);
        // The Wi-Fi network has been acquired, bind it to use this network by default
        connectivityManager.bindProcessToNetwork(network);
    }

    public void onLost(Network network) {
        super.onLost(network);
        // The Wi-Fi network has been disconnected
    }
};
connectivityManager.requestNetwork(
        new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
);

Việc truy cập mạng có thể không tức thì vì Wi-Fi hoặc sóng di động của đồng hồ có thể đang tắt để tiết kiệm pin. Ngoài ra, nếu đồng hồ không thể kết nối mạng, thì phương thức onAvailable() của thực thể NetworkCallback sẽ không được gọi.

Sau khi onAvailable() được gọi, thiết bị sẽ cố gắng duy trì kết nối với mạng Wi-Fi cho đến khi NetworkCallback được phát hành. Huỷ lệnh gọi lại khi bạn không còn cần mạng Wi-Fi để duy trì thời lượng pin.

Kotlin

connectivityManager.bindProcessToNetwork(null)
connectivityManager.unregisterNetworkCallback(callback)

Java

connectivityManager.bindProcessToNetwork(null);
connectivityManager.unregisterNetworkCallback(callback);

Chạy hoạt động cài đặt Wi-Fi

Khi yêu cầu mạng Wi-Fi, hệ thống sẽ cố gắng kết nối với một mạng đã lưu nếu mạng đã lưu được định cấu hình và trong phạm vi phủ sóng. Tuy nhiên, nếu không có mạng Wi-Fi đã lưu nào đang trong tình trạng kết nối được, thì phương thức gọi lại onAvailable() của bản sao NetworkCallback sẽ không được gọi.

Nếu đang sử dụng Handler để tạm ngừng (do hết thời gian chờ) các yêu cầu mạng, bạn có thể hướng dẫn người dùng thêm một mạng Wi-Fi vào khi hết thời gian chờ. Đưa người dùng trực tiếp đến hoạt động để thêm mạng Wi-Fi bằng cách sử dụng ý định sau:

Kotlin

context.startActivity(Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"))

Java

context.startActivity(new Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"));

Để chạy hoạt động cài đặt, ứng dụng của bạn phải có quyền sau: android.permission.CHANGE_WIFI_STATE

Những điều cần cân nhắc về giao diện người dùng

Nếu ứng dụng của bạn yêu cầu kết nối với mạng Wi-Fi mới để có thể hoạt động với băng thông cao, hãy đảm bảo việc cho người dùng biết lý do kết nối rõ ràng trước khi bạn chạy chế độ cài đặt Wi-Fi. Chỉ yêu cầu người dùng thêm mạng Wi-Fi mới khi cần dùng mạng băng thông cao. Không chặn người dùng truy cập vào các tính năng không yêu cầu mạng băng thông cao của ứng dụng.

Hình 1 cho thấy một ứng dụng nhạc. Ứng dụng phải cho phép người dùng duyệt nhạc và chỉ yêu cầu người dùng thêm mạng Wi-Fi mới nếu họ muốn tải nhạc xuống hoặc phát nhạc trực tuyến.

Đang tải nhạc xuống

Hình 1. Quy trình tải nhạc xuống qua ứng dụng âm nhạc.

Gửi thông báo qua đám mây

Để gửi thông báo, các ứng dụng có thể sử dụng trực tiếp Giải pháp gửi thông báo qua đám mây của Firebase (FCM).

Không có API nào để truy cập mạng hoặc FCM dành riêng cho Wear OS. Tham khảo tài liệu hiện có về cách kết nối mạnggửi thông báo qua đám mây.

FCM hoạt động tốt với Chế độ nghỉ và là cách bạn nên dùng để gửi thông báo tới đồng hồ.

Cung cấp tin nhắn từ FCM bằng cách thu thập mã thông báo đăng ký cho thiết bị khi ứng dụng Wear OS của bạn chạy. Sau đó, hãy đưa mã thông báo vào dưới dạng đích đến khi máy chủ của bạn gửi thông báo đến điểm cuối REST của FCM. FCM gửi tin nhắn tới thiết bị được xác định bằng mã thông báo.

Thông báo FCM có định dạng JSON và có thể bao gồm một hoặc cả hai gói dữ liệu sau:

  • Gói dữ liệu thông báo. Khi một đồng hồ nhận được gói dữ liệu thông báo, dữ liệu sẽ trực tiếp hiển thị với người dùng trong luồng thông báo. Khi người dùng nhấn vào thông báo đó, ứng dụng của bạn sẽ chạy.
  • Gói dữ liệu. Gói dữ liệu có một tập hợp các cặp khoá/giá trị tuỳ chỉnh. Gói dữ liệu được phân phối dưới dạng dữ liệu tới ứng dụng Wear OS của bạn.

Để biết thêm thông tin và ví dụ về các gói dữ liệu, hãy xem phần Giới thiệu về thông báo FCM.

Theo mặc định, thông báo sẽ được bắc cầu (chia sẻ) từ một ứng dụng dành cho điện thoại sang ứng dụng trên đồng hồ. Nếu bạn có một ứng dụng Wear OS độc lập và một ứng dụng điện thoại tương ứng, thì có thể xảy ra các thông báo trùng lặp. Ví dụ: cả điện thoại và đồng hồ đều nhận cùng một thông báo từ FCM, thông báo này có thể hiển thị độc lập trên cả hai thiết bị. Bạn có thể ngăn chặn điều này bằng cách sử dụng API cầu nối.

Sử dụng các dịch vụ nền

Để đảm bảo thực thi chính xác các tác vụ trong nền, các dịch vụ nền phải tính đến Chế độ nghỉ và Chế độ chờ ứng dụng.

Khi một màn hình tắt hoặc chuyển sang chế độ môi trường xung quanh trong thời gian đủ lâu, một tập hợp con của chế độ Nghỉ có thể xuất hiện và các tác vụ trong nền có thể bị trì hoãn trong một số khoảng thời gian nhất định. Sau đó, khi một thiết bị đứng yên trong một khoảng thời gian dài, thì Chế độ nghỉ thông thường sẽ xảy ra. Bạn nên lên lịch cho các yêu cầu bằng API WorkManager, cho phép ứng dụng đăng ký quá trình thực thi mã an toàn với Chế độ nghỉ.

Lên lịch kèm các điều kiện ràng buộc

Bạn có thể sử dụng các điều kiện ràng buộc để định cấu hình các yêu cầu theo cách bảo toàn thời lượng pin. Chọn một hoặc nhiều điều kiện ràng buộc sau để đưa vào yêu cầu của bạn:

  • Lên lịch yêu cầu cần kết nối mạng. Hãy chỉ định xem NetworkTypeCONNECTED hay UNMETERED. UNMETERED dùng để chuyển dữ liệu lớn, còn CONNECTED dùng để chuyển dữ liệu nhỏ.
  • Lên lịch cho một yêu cầu khi đang sạc pin.
  • Lên lịch cho một yêu cầu khi thiết bị ở trạng thái rảnh. Điều này hữu ích cho các quá trình đồng bộ hoá hoặc công việc trong nền có mức độ ưu tiên thấp hơn, đặc biệt là khi thiết bị đang sạc.

Lưu ý rằng một số mạng băng thông thấp, chẳng hạn như Bluetooth LE, được coi là có đo lượng dữ liệu.

Để biết thêm thông tin, hãy xem lại hướng dẫn Ảnh hưởng của các điều kiện ràng buộc đối với công việc định kỳ của WorkManager.