Giới hạn vị trí dưới nền

Nhằm giảm mức tiêu thụ điện năng, Android 8.0 (API cấp 26) giới hạn tần suất một ứng dụng có thể truy xuất thông tin vị trí hiện tại của người dùng trong khi ứng dụng đang chạy ở chế độ nền. Trong các điều kiện này, các ứng dụng chỉ có thể nhận thông tin cập nhật vị trí vài lần mỗi giờ.

Lưu ý: Những giới hạn này áp dụng cho mọi ứng dụng dùng trên thiết bị chạy Android 8.0 (API cấp 26) trở lên, bất kể phiên bản SDK mục tiêu của ứng dụng.

Hành vi truy xuất vị trí này đặc biệt quan trọng cần lưu ý nếu ứng dụng của bạn dựa vào cảnh báo theo thời gian thực hoặc tính năng phát hiện chuyển động trong khi chạy ở chế độ nền.

Hành vi của ứng dụng trên nền trước được giữ nguyên

Nếu một ứng dụng chạy ở nền trước trên thiết bị chạy Android 8.0 (API cấp 26), thì hành vi cập nhật vị trí sẽ giống như trên Android 7.1.1 (API cấp 25) trở xuống.

Cảnh báo: Nếu ứng dụng của bạn truy xuất dữ liệu cập nhật vị trí theo thời gian thực trong một khoảng thời gian dài, thì thời lượng pin của thiết bị sẽ rút ngắn đáng kể.

Điều chỉnh hành vi vị trí của ứng dụng

Hãy cân nhắc xem có phải các trường hợp sử dụng để chạy ở chế độ nền của ứng dụng không thành công hay không nếu ứng dụng nhận được thông tin cập nhật vị trí không thường xuyên. Trong trường hợp này, bạn có thể truy xuất thông tin cập nhật vị trí thường xuyên hơn bằng cách thực hiện một trong các thao tác sau:

  • Đưa ứng dụng của bạn lên nền trước.
  • Bắt đầu một dịch vụ trên nền trước trong ứng dụng của bạn bằng cách gọi startForegroundService(). Khi một dịch vụ trên nền trước đó đang hoạt động, dịch vụ đó sẽ xuất hiện dưới dạng một thông báo hiển thị liên tục trong khu vực thông báo.

    Thận trọng: Nếu ứng dụng của bạn khởi động một dịch vụ trên nền trước trong khi chạy ở chế độ nền trên thiết bị chạy Android 11 (API cấp 30) trở lên, thì ứng dụng đó sẽ không thể truy cập vào thông tin vị trí trừ phi người dùng đã cấp quyền ACCESS_BACKGROUND_LOCATION cho ứng dụng của bạn. Để biết thêm thông tin, hãy xem hướng dẫn về các hạn chế khi sử dụng liên quan đến các dịch vụ trên nền trước.

  • Sử dụng các phần tử của API Khoanh vùng địa lý, chẳng hạn như GeofencingClient, được tối ưu hoá để giảm thiểu mức sử dụng nguồn.
  • Sử dụng trình nghe thông tin vị trí thụ động. Trình nghe này có thể nhận thông tin cập nhật vị trí nhanh hơn nếu có ứng dụng trên nền trước yêu cầu thông tin cập nhật vị trí với tốc độ nhanh hơn.

Lưu ý: Nếu ứng dụng của bạn cần quyền truy cập vào nhật ký vị trí chứa các bản cập nhật thường xuyên, hãy sử dụng phiên bản theo lô của các phần tử API Trình cung cấp vị trí kết hợp, chẳng hạn như giao diện FusedLocationProviderApi. Khi ứng dụng của bạn đang chạy ở chế độ nền, API này sẽ nhận được thông tin vị trí của người dùng thường xuyên hơn so với API không được phân lô. Tuy nhiên, hãy lưu ý rằng ứng dụng của bạn vẫn chỉ nhận được các bản cập nhật theo lô chỉ vài lần mỗi giờ.

API bị ảnh hưởng

Những thay đổi về hành vi truy xuất vị trí trong ứng dụng nền sẽ ảnh hưởng đến các API sau:

Trình cung cấp vị trí kết hợp (FLP)
  • Nếu ứng dụng của bạn đang chạy ở chế độ nền thì dịch vụ hệ thống vị trí sẽ chỉ tính toán vị trí mới cho ứng dụng vài lần mỗi giờ. Trường hợp này áp dụng ngay cả khi ứng dụng của bạn yêu cầu thông tin cập nhật vị trí thường xuyên hơn.

    Tuy nhiên, bằng cách sử dụng phiên bản FLP theo lô, bạn sẽ có quyền truy cập vào nhật ký vị trí thường xuyên hơn sau khi ứng dụng nhận được một bản cập nhật theo lô, quá trình này cũng chỉ xảy ra vài lần mỗi giờ.

  • Nếu ứng dụng của bạn đang chạy ở nền trước, thì tốc độ lấy mẫu vị trí sẽ không thay đổi so với Android 7.1.1 (API cấp 25).
Khoanh vùng địa lý
  • Ứng dụng nền có thể nhận được sự kiện chuyển đổi khoanh vùng địa lý thường xuyên hơn so với thông tin cập nhật từ Trình cung cấp vị trí kết hợp.
  • Thời gian phản hồi trung bình cho một sự kiện khoanh vùng địa lý là vài phút một lần.
Thông báo điều hướng GNSS và chỉ số đo lường GNSS
  • Khi ứng dụng của bạn chạy trong nền, các lệnh gọi lại được đăng ký để nhận đầu ra từ GnssMeasurementGnssNavigationMessage sẽ ngừng thực thi.
Trình quản lý vị trí
  • Thông tin cập nhật vị trí chỉ được cung cấp cho các ứng dụng nền vài lần mỗi giờ.

    Lưu ý: Nếu ứng dụng của bạn đang chạy trên một thiết bị đã cài đặt Dịch vụ Google Play, bạn nên sử dụng Trình cung cấp vị trí kết hợp (FLP).

Trình quản lý Wi-Fi
Phương thức startScan() chỉ quét toàn bộ các ứng dụng trong nền vài lần mỗi giờ. Nếu một ứng dụng nền ngay sau đó gọi lại phương thức này, thì lớp WifiManager sẽ cung cấp kết quả lưu vào bộ nhớ đệm từ lần quét trước đó.