Các phương pháp hay nhất về việc sử dụng quyền truy cập thông tin vị trí ở chế độ nền

Trang này giải thích các phương pháp hay nhất để yêu cầu và quản lý quyền sử dụng thông tin vị trí ở chế độ nền.

Yêu cầu quyền truy cập thông tin vị trí ở chế độ "Luôn cho phép"

Kể từ Android 14, ứng dụng phải có quyền ACCESS_BACKGROUND_LOCATION để truy cập thông tin vị trí của người dùng. SDK Điều hướng bao gồm quyền này trong tệp kê khai, vì vậy, bạn không cần yêu cầu quyền này một cách rõ ràng (nếu không cần cho các mục đích khác), vì trình hợp nhất tệp kê khai Gradle sẽ đảm bảo quyền này được hợp nhất với tệp kê khai của ứng dụng.

Tuy nhiên, quyền ACCESS_BACKGROUND_LOCATION là chưa đủ để truy cập thông tin vị trí ở chế độ nền. Bạn nên yêu cầu người dùng cấp quyền "Cho phép mọi lúc" đối với thông tin vị trí. Điều này đảm bảo rằng ứng dụng có thể chạy ở chế độ nền và hiển thị thông báo, giúp tối đa hoá độ chính xác của vị trí trong quá trình điều hướng.

Lời nhắc phải giải thích cho người dùng cách việc cấp quyền sẽ cải thiện độ chính xác của vị trí và cải thiện trải nghiệm điều hướng của họ khi ứng dụng chạy ở chế độ nền.

hộp thoại quyền mẫu

Để biết thêm thông tin về cách nhắc người dùng cấp quyền truy cập thông tin vị trí, hãy xem phần Yêu cầu quyền truy cập thông tin vị trí | Cảm biến và vị trí | Nhà phát triển Android trong tài liệu dành cho nhà phát triển Android.

Đảm bảo dọn dẹp thông báo điều hướng đúng cách

Để đảm bảo rằng ứng dụng của bạn không tiếp tục hiển thị thông báo sau khi không còn cần thiết, hãy nhớ thực hiện các bước dọn dẹp sau:

  • Sau khi gọi startGuidance(), hãy nhớ gọi stopGuidance() hoặc clearDestination().
  • Sau khi đăng ký ArrivalListener, hãy nhớ huỷ đăng ký.
  • Sau khi đăng ký RoadSnappedLocationProvider, hãy nhớ huỷ đăng ký.

Việc hoàn tất các bước này đảm bảo rằng thông báo không được duy trì khi không còn cần thiết, điều này có thể dẫn đến tình trạng hao pin và rò rỉ bộ nhớ.

Khi gọi lại các phương thức NavigationApi#initForegroundServiceManager, trước tiên, hãy gọi NavigationApi#clearForegroundServiceManager

Nếu ứng dụng của bạn đang sử dụng ForegroundServiceManager, hãy gọi NavigationApi#clearForegroundServiceManager trước khi gọi NavigationApi#initForegroundServiceManagerProvider và nếu bạn đã khởi chạy ForegroundServiceManager, hãy gọi NavigationApi#initForegroundServiceManagerMessageAndIntent. Bạn có thể thực hiện việc này để cập nhật mã thông báo hoặc nội dung thông báo sau khi khởi chạy trình quản lý dịch vụ trên nền trước.

Giới thiệu về các quy định hạn chế mới trong Android 14

Android 14 (Android U) đã đưa ra các hạn chế mới đối với ứng dụng truy cập thông tin vị trí của người dùng ở chế độ nền. Để giúp giảm thiểu những thay đổi này, SDK Điều hướng đã được cập nhật trong phiên bản 5.4.0 để quản lý quyền truy cập thông tin vị trí ở chế độ nền hiệu quả hơn. Bạn cũng nên cập nhật cách triển khai để đảm bảo ứng dụng của mình tiếp tục có quyền truy cập vào dữ liệu vị trí chính xác nhất.

Mức độ tác động của các thay đổi trong Android 14 đối với Navigation SDK

Khi bạn gọi startGuidance() trong ứng dụng, dịch vụ trên nền trước sẽ bắt đầu hiển thị thông báo cho người dùng về tính năng chỉ đường từng chặng. Tính năng chỉ đường từng chặng phụ thuộc vào việc có thể truy cập thông tin vị trí của người dùng để cập nhật tuyến đường và hiển thị hướng dẫn bằng hình ảnh và âm thanh chính xác. Kể từ Android 14, bạn phải có quyền của người dùng thì mới có thể truy cập thông tin vị trí chính xác của người dùng ở chế độ nền. Theo mặc định, nếu một ứng dụng không có quyền truy cập thông tin vị trí ở chế độ nền của người dùng và cố gắng bắt đầu một dịch vụ trên nền trước để cập nhật thông tin vị trí, thì hệ thống sẽ gửi một SecurityException, khiến ứng dụng gặp sự cố.

Cách Navigation SDK giảm thiểu vấn đề này

Kể từ phiên bản 5.4.0, SDK Điều hướng sẽ xử lý SecurityException này mà không ảnh hưởng đến ứng dụng, cho phép tính năng điều hướng tiếp tục chạy ở chế độ nền. Ngoài ra, SDK Điều hướng bao gồm quyền ACCESS_BACKGROUND_LOCATION trong AndroidManifest. Bằng cách này, ứng dụng của bạn không cần tự khai báo quyền vì tính năng hợp nhất Gradle sẽ xử lý quyền đó. Tuy nhiên, nếu không hiển thị thông báo cho người dùng trước khi ứng dụng chuyển sang chế độ nền, thì SDK Điều hướng sẽ dựa vào hệ thống để cung cấp thông tin cập nhật về vị trí. Các bản cập nhật hệ thống này có thể không thường xuyên hoặc không chính xác, dẫn đến trải nghiệm điều hướng không tối ưu. Vì lý do này, bạn cũng nên nhắc người dùng cấp quyền truy cập thông tin vị trí ở chế độ nền.

Những việc nhà phát triển ứng dụng có thể làm để cải thiện độ chính xác của vị trí cho tính năng chỉ đường

Bạn có thể cải thiện độ chính xác của tín hiệu vị trí mà SDK Điều hướng sử dụng bằng cách cập nhật ứng dụng để nhắc người dùng cấp quyền truy cập thông tin vị trí ở chế độ nền. Để biết thêm thông tin, hãy xem phần Yêu cầu quyền truy cập thông tin vị trí "Luôn cho phép".