Tối ưu hoá việc sử dụng thông tin vị trí cho các tình huống thực tế

Phần này mô tả một số trường hợp thu thập thông tin vị trí điển hình, cùng với các đề xuất sử dụng tối ưu tính năng khoanh vùng địa lý và các API trình cung cấp vị trí kết hợp.

Các bản cập nhật chế độ hiển thị người dùng hoặc nền trước

Ví dụ: Một ứng dụng bản đồ cần các cập nhật thường xuyên, chính xác với độ trễ rất thấp. Mọi hoạt động cập nhật diễn ra ở nền trước: người dùng bắt đầu một hoạt động, sử dụng dữ liệu vị trí và sau đó dừng hoạt động đó sau thời gian ngắn.

Sử dụng phương thức setPriority() với giá trị PRIORITY_HIGH_ACCURACY hoặc PRIORITY_BALANCED_POWER_ACCURACY.

Khoảng thời gian chỉ định trong phương thức setInterval() tuỳ thuộc vào trường hợp sử dụng: trong trường hợp theo thời gian thực, hãy đặt giá trị thành vài giây; nếu không, hãy giới hạn ở vài phút (nên đặt ở khoảng hai phút trở lên để giảm thiểu mức sử dụng pin).

Biết vị trí của thiết bị

Ví dụ: Một ứng dụng thời tiết muốn biết vị trí của thiết bị.

Sử dụng phương thức getLastLocation(). Phương thức này sẽ trả về vị trí có sẵn gần nhất (trong một số ít trường hợp có thể là rỗng). Phương thức này cung cấp cách thức đơn giản để nhận thông tin vị trí và bạn không phải chịu chi phí liên quan đến việc chủ động yêu cầu cập nhật vị trí. Hãy sử dụng cùng với phương thức isLocationAvailable(), phương thức này sẽ trả về true khi vị trí được trả về bởi getLastLocation() được cập nhật hợp lý.

Bắt đầu cập nhật khi người dùng đang ở một vị trí cụ thể

Ví dụ: Yêu cầu cập nhật khi người dùng ở trong một khoảng cách nhất định so với cơ quan, nhà riêng hoặc một vị trí khác.

Sử dụng tính năng khoanh vùng địa lý kết hợp với bản cập nhật của trình cung cấp vị trí kết hợp. Yêu cầu cập nhật khi ứng dụng nhận được trình kích hoạt khoanh vùng địa lý đầu vào và xoá các bản cập nhật khi ứng dụng nhận được trình kích hoạt khoanh vùng địa lý đầu ra. Việc này đảm bảo ứng dụng chỉ nhận được thông báo cập nhật chi tiết về vị trí khi người dùng đã nhập một khu vực được xác định.

Quy trình công việc thông thường cho tình huống này có thể bao gồm việc hiển thị thông báo khi chuyển đổi vào (enter transition) tính năng khoanh vùng địa lý, đồng thời khởi chạy một hoạt động chứa mã để yêu cầu cập nhật khi người dùng nhấn vào thông báo.

Bắt đầu cập nhật dựa trên trạng thái hoạt động của người dùng

Ví dụ: Chỉ yêu cầu cập nhật khi người dùng đang lái xe hoặc đi xe đạp.

Sử dụng API Nhận dạng hoạt động cùng với thông tin cập nhật từ trình cung cấp vị trí kết hợp. Yêu cầu cập nhật khi phát hiện hoạt động được nhắm mục tiêu và xoá các bản cập nhật khi người dùng ngừng thực hiện hoạt động đó.

Quy trình công việc thông thường cho trường hợp sử dụng này có thể bao gồm việc hiển thị một thông báo cho hoạt động đã phát hiện và phát hành một hoạt động chứa mã để yêu cầu cập nhật khi người dùng nhấn vào thông báo đó.

Các bản cập nhật quyền truy cập thông tin vị trí ở chế độ nền lâu dài gắn với khu vực địa lý

Ví dụ: Người dùng muốn được thông báo khi thiết bị ở gần nhà bán lẻ.

Đây là trường hợp sử dụng tuyệt vời cho tính năng khoanh vùng địa lý. Vì trường hợp sử dụng này gần như chắc chắn có liên quan đến quyền truy cập thông tin vị trí ở chế độ nền, hãy sử dụng phương thức addGeofences(GeofencingRequest, PendingIntent).

Bạn nên đặt các tùy chọn cấu hình sau đây:

  • Nếu bạn đang theo dõi các lượt chuyển đổi ở trạng thái dừng, hãy sử dụng phương thức setLoiteringDelay() chuyển giá trị trong khoảng năm phút trở xuống.

  • Sử dụng setNotificationResponsiveness(), chuyển giá trị khoảng năm phút. Tuy nhiên, hãy cân nhắc sử dụng giá trị khoảng mười phút nếu ứng dụng của bạn có thể kiểm soát việc trì hoãn thêm phản hồi.

Một ứng dụng chỉ có thể đăng ký tối đa 100 khoanh vùng địa lý một lúc. Trong trường hợp muốn theo dõi số lượng lớn lựa chọn liên quan đến nhà bán lẻ, ứng dụng nên đăng ký khoanh vùng địa lý lớn (ở cấp thành phố) và linh động đăng ký khoanh vùng địa lý nhỏ hơn (đối với các địa điểm trong thành phố) cho những cửa hàng trong khoanh vùng địa lý lớn hơn. Khi người dùng nhập khoanh vùng địa lý lớn, hãy thêm khoanh vùng địa lý nhỏ hơn; khi người dùng thoát khỏi khoanh vùng địa lý lớn, hãy xoá khoanh vùng địa lý nhỏ hơn và đăng ký lại khoanh vùng địa lý cho khu vực mới.

Các bản cập nhật quyền truy cập thông tin vị trí ở chế độ nền lâu dài không có thành phần ứng dụng hiển thị

Ví dụ: Một ứng dụng theo dõi vị trí một cách bị động

Hãy sử dụng phương thức setPriority() với tuỳ chọn PRIORITY_NO_POWER nếu có thể vì phương thức này gần như không làm tiêu hao pin. Nếu không thể sử dụng PRIORITY_NO_POWER, hãy sử dụng PRIORITY_BALANCED_POWER_ACCURACY hoặc PRIORITY_LOW_POWER, nhưng tránh sử dụng PRIORITY_HIGH_ACCURACY để duy trì tác vụ nền vì tuỳ chọn này làm tiêu hao pin đáng kể.

Nếu bạn cần nhiều dữ liệu vị trí hơn, hãy sử dụng dịch vụ vị trí thụ động bằng cách gọi phương thức setFastestInterval() chuyển giá trị nhỏ hơn giá trị bạn chuyển đến setInterval(). Khi kết hợp với tuỳ chọn PRIORITY_NO_POWER, dịch vụ vị trí thụ động có thể phân phối vị trí được các ứng dụng khác tính toán mà không mất thêm chi phí.

Điều chỉnh tần suất bằng cách thêm độ trễ, sử dụng phương thức setMaxWaitTime(). Ví dụ: nếu bạn sử dụng phương thức setinterval() có giá trị khoảng 10 phút, bạn nên xem xét việc gọi setMaxWaitTime() với giá trị nằm trong khoảng từ 30 đến 60 phút. Khi sử dụng các tuỳ chọn này, vị trí được tính toán cho ứng dụng của bạn khoảng 10 phút một lần, nhưng ứng dụng chỉ được đánh thức 30 đến 60 phút một lần với một số dữ liệu vị trí có sẵn dưới dạng bản cập nhật theo lô. Phương pháp này đánh đổi độ trễ để có nhiều dữ liệu hơn và hiệu suất pin tốt hơn.

Thường xuyên cập nhật độ chính xác cao khi người dùng tương tác với các ứng dụng khác

Ví dụ: Một ứng dụng điều hướng hoặc thể dục vẫn tiếp tục hoạt động khi người dùng tắt màn hình hoặc mở một ứng dụng khác.

Sử dụng dịch vụ trên nền trước. Nếu tác vụ tốn kém có khả năng sẽ được ứng dụng của bạn thực hiện thay mặt người dùng, thì tốt nhất bạn nên thông báo cho người dùng về tác vụ đó. Một dịch vụ trên nền trước yêu cầu một thông báo liên tục. Để biết thêm thông tin, hãy xem bài viết Tổng quan về thông báo.