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

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. Đừng sử dụng Data Layer API (API Lớp dữ liệu) để kết nối ứng dụng Wear OS với mạng. Thay vào đó, hãy làm theo các nguyên tắc cũng như các bước trong hướng dẫn này.

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ồ kết nối với điện thoại qua Bluetooth, 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 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 bài viết Đọc trạng thái mạng.

Quyền 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 2 nhu cầu:

  • Thời lượng pin lâu
  • 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 có đủ băng thông cho các nhiệm vụ mạng như truyền tải các tệp có kích thước lớn hoặc phát trực tuyến nội dung nghe nhì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ó băng thông mạng theo đúng nhu cầu. Để 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 bài viết 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 có kích thước lớn hoặc phát trực tuyến nội dung nghe nhì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. Điều này được thể hiện trong ví dụ sau:

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)
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
}
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);
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
};
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. 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 huỷ. Để bảo toàn thời lượng pin, hãy huỷ lệnh gọi lại như trong ví dụ sau khi bạn không còn cần mạng Wi-Fi nữa.

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 cần 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 đó được định cấu hình và nằm trong vùng phủ sóng. Nếu không có mạng Wi-Fi đã lưu nào để kết nối, thì phương pháp gọi lại onAvailable() của thực thể NetworkCallback sẽ không được gọi.

Nếu đang sử dụng Handler để tạm ngừng các yêu cầu mạng (do hết thời gian chờ), bạn có thể hướng dẫn người dùng thêm một mạng Wi-Fi 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 cần kết nối với mạng Wi-Fi mới để sử dụng băng thông cao, hãy nhớ cho người dùng biết rõ lý do kết nối trước khi bạn mở 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 được 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 minh hoạ một ứng dụng nhạc. Ứng dụng cho phép người dùng duyệt nhạc trên mạng băng thông thấp hơn 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.

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.

Những điều cần cân nhắc về việc sử dụng nguồn điện và dữ liệu

Để duy trì thời lượng pin và giảm thiểu mức sử dụng dữ liệu di động, hãy trì hoãn mọi tác vụ kết nối không cần thiết, chẳng hạn như báo cáo phân tích hoặc thu thập nhật ký, cho đến khi thiết bị Wear OS thiết lập lại kết nối Bluetooth hoặc Wi-Fi.

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 thông báo tới thiết bị được xác định bằng mã thông báo.

Thông báo FCM sẽ có định dạng JavaScript Object Notation (JSON) và có thể bao gồm một hoặc cả hai tải trọng sau:

  • Tải trọng thông báo: khi một đồng hồ nhận được trọng tải 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.
  • Tải trọng dữ liệu: tải trọng có một tập hợp các cặp giá trị hoặc khoá tuỳ chỉnh. Tải trọng dữ liệu được phân phối dưới dạng dữ liệu gửi tới ứng dụng Wear OS của bạn.

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

Theo mặc định, thông báo sẽ được bắc cầu từ một ứng dụng điện thoại sang đồ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 hiện tượng các thông báo bị 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 nhiệm 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 nhiệm 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ẽ bật. Lên lịch cho các yêu cầu bằng API WorkManager giú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 cho 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 có kích thước lớn, còn CONNECTED dùng để chuyển dữ liệu có kích thước 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. Việc này sẽ giúp í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.