Phát hiện thông tin vị trí trên Wear OS

Kiểu dáng nhỏ nhắn, có thể xem lướt qua của đồng hồ giúp thiết bị Wear OS trở thành nền tảng lý tưởng cho những ứng dụng có chức năng ghi lại, báo cáo và phản hồi về thông tin vị trí của người dùng. Ví dụ: bạn có thể xây dựng ứng dụng thông báo cho người dùng theo thời gian thực thông tin về khoảng cách, tốc độ và hướng đi của họ, hoặc cung cấp các chỉ dẫn có thể xem nhanh về môi trường xung quanh người dùng.

Để biết thêm thông tin, vui lòng xem bài viết Tạo các ứng dụng nhận biết vị trí.

Một số đồng hồ có cảm biến GPS tích hợp để truy xuất dữ liệu vị trí mà không cần đến điện thoại đã kết nối. Khi bạn yêu cầu dữ liệu vị trí trong một ứng dụng đồng hồ, hệ thống sẽ truy xuất thông tin vị trí của điện thoại hoặc đồng hồ bằng cách sử dụng phương thức tiết kiệm pin nhất. Vì vậy, ngay cả khi không có cảm biến GPS trong đồng hồ, bạn vẫn có thể nhận được thông tin vị trí.

Để giảm ảnh hưởng của việc thu thập dữ liệu vị trí đến thời lượng pin, hãy gọi setPriority() với giá trị PRIORITY_BALANCED_POWER_ACCURACY. Các chế độ cài đặt khác nhau về mức độ ưu tiên có thể tối ưu hoá các chip theo những cách khác nhau.

Khi có thể, hãy tiết kiệm pin bằng cách không yêu cầu thông tin vị trí quá một lần mỗi phút thông qua setInterval().

Như mô tả trong các phần sau, ứng dụng của bạn cần xử lý tình trạng mất dữ liệu vị trí khi đồng hồ không có cảm biến bị ngắt kết nối với điện thoại.

Chọn phương thức

Có một số cách để cung cấp dữ liệu vị trí cho ứng dụng Wear OS. Bạn có thể sử dụng Trình cung cấp vị trí kết hợp (FLP) hoặc Dịch vụ sức khoẻ trên Wear (WHS). FLP là một API Dịch vụ Google Play.

Hãy sử dụng FLP trong các trường hợp sau:

  • Bạn muốn nhận dữ liệu vị trí vào lúc này, nhưng không cần dữ liệu liên tục, chẳng hạn như đánh dấu vị trí đỗ xe.
  • Bạn muốn nhận dữ liệu vị trí một cách liên tục nhưng không cần nhật ký vị trí.

Hãy sử dụng WHS trong các trường hợp sau:

  • Bạn muốn nhận dữ liệu từ các cảm biến khác hoặc có thể muốn nhận dữ liệu từ các cảm biến khác trong tương lai.
  • Ứng dụng của bạn là một ứng dụng tập thể dục hoặc ứng dụng cung cấp bài tập thể dục cần theo dõi dữ liệu vị trí trong một khoảng thời gian cụ thể.

Đối với đồng hồ ghép nối với iPhone, hãy xem phần Dữ liệu vị trí của đồng hồ ghép nối với iPhone.

Sử dụng Trình cung cấp vị trí kết hợp

Trên đồng hồ, hãy lấy dữ liệu vị trí bằng cách sử dụng FusedLocationProviderClient. FLP có thể dùng dữ liệu vị trí từ điện thoại. Để biết thêm thông tin, hãy xem bài viết Tạo ứng dụng dịch vụ vị trí.

Để biết thông tin về cách yêu cầu thông tin cập nhật vị trí và liên tục theo dõi vị trí của người dùng, hãy xem bài viết Yêu cầu thông tin cập nhật vị trí.

Phát hiện GPS được tích hợp sẵn

Nếu người dùng chạy bộ khi đeo một đồng hồ không có cảm biến GPS tích hợp và quên mang theo điện thoại đã ghép nối, thì ứng dụng đồng hồ của bạn sẽ không thể nhận dữ liệu vị trí thông qua thiết bị đã kết nối. Hãy phát hiện tình huống này trong ứng dụng của bạn và cảnh báo người dùng rằng chức năng vị trí không hoạt động.

Để xác định xem đồng hồ có cảm biến GPS tích hợp hay không, hãy gọi phương thức hasSystemFeature() với PackageManager.FEATURE_LOCATION_GPS. Đoạn mã sau đây phát hiện xem đồng hồ có cảm biến GPS tích hợp hay không khi bạn bắt đầu một hoạt động:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)

    if (!hasGps()) {
        Log.d(TAG, "This hardware doesn't have GPS.")
        // Fall back to functionality that doesn't use location or
        // warn the user that location function isn't available.
    }
}

private fun hasGps(): Boolean =
        packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS)

Java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    if (!hasGps()) {
        Log.d(TAG, "This hardware doesn't have GPS.");
        // Fall back to functionality that doesn't use location or
        // warn the user that location function isn't available.
    }
    ...
}

private boolean hasGps() {
    return getPackageManager().hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);
}

Xử lý sự kiện ngắt kết nối

Nếu đồng hồ không có cảm biến GPS được tích hợp sẵn và mất kết nối với điện thoại, thì đồng hồ sẽ mất luồng dữ liệu vị trí. Nếu ứng dụng của bạn muốn có luồng dữ liệu liên tục, ứng dụng phải phát hiện tình trạng mất kết nối, thông báo cho người dùng và xuống cấp nhẹ về chức năng.

Tương tự như thiết bị di động, khi bạn yêu cầu thông tin cập nhật vị trí bằng cách sử dụng FusedLocationProviderClient.requestLocationUpdates(), bạn sẽ truyền LocationCallback hoặc PendingIntent. Cả hai đều bao gồm thông tin vị trí và trạng thái LocationAvailability.

Khi sử dụng tuỳ chọn LocationCallback, hãy ghi đè onLocationAvailability() để nhận thông tin cập nhật về trạng thái sẵn có của vị trí.

Khi sử dụng tuỳ chọn PendingIntent và một Intent được trả về, hãy trích xuất trạng thái sẵn có của vị trí từ Intent bằng phương thức LocationAvailability.extractLocationAvailability(Intent).

Xử lý lỗi không tìm thấy thông tin vị trí

Khi mất tín hiệu GPS, bạn có thể truy xuất thông tin vị trí xác định gần đây nhất trên đồng hồ của người dùng. Việc truy xuất thông tin vị trí xác định gần đây nhất sẽ hữu ích khi bạn không thể khắc phục sự cố về GPS cũng như khi đồng hồ thiếu GPS tích hợp và mất kết nối với điện thoại. Để biết thêm thông tin, vui lòng xem bài viết Nhận thông tin vị trí xác định gần đây nhất.

Xoá thông tin vị trí bằng các lệnh gọi theo lô

Nếu bạn đang sử dụng các lệnh gọi theo lô, hãy gọi flushLocations() khi màn hình bật trở lại hoặc quay lại từ chế độ môi trường xung quanh để trả về ngay lập tức mọi thông tin vị trí theo lô cho tất cả LocationListeners, LocationCallbacksPending Intents đã đăng ký.