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í "Luôn cho phép"
Kể từ Android 14, các ứng dụng phải có quyền ACCESS_BACKGROUND_LOCATION
để truy cập vào vị trí của người dùng.
Navigation SDK đưa quyền này vào tệp kê khai của mình, nên bạn không cần phải 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, chỉ có quyền ACCESS_BACKGROUND_LOCATION
là không đủ để truy cập vào vị trí ở chế độ nền và bạn nên yêu cầu người dùng cấp quyền truy cập thông tin vị trí "Luôn cho phép". Đ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 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 khi ứng dụng đang chạy ở chế độ nền.
Để biết thêm thông tin về việc nhắc người dùng cấp quyền truy cập thông tin vị trí, hãy xem bài viết 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 đúng cách các thông báo điều hướng
Để đảm bảo rằng ứng dụng của bạn không giữ thông báo hoạt động sau khi không còn cần thiết, hãy đảm bảo bạn thực hiện các bước dọn dẹp sau:
- Sau khi gọi
startGuidance()
, hãy nhớ gọistopGuidance()
hoặcclearDestination()
. - 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 các 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à có thể gây 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ã nhận dạng 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 được áp dụng 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, Navigation SDK đã được cập nhật trong phiên bản 5.4.0 để quản lý tốt hơn quyền truy cập vào vị trí ở chế độ nền. Bạn cũng nên cập nhật việc triển khai để đảm bảo ứng dụng của bạn tiếp tục có quyền truy cập vào dữ liệu vị trí chính xác nhất.
Những thay đổi trong Android 14 ảnh hưởng đến Navigation SDK như thế nào
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ề chế độ chỉ đường từng chặng. Tính năng chỉ đường từng chặng phụ thuộc vào khả năng 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 trực quan và âm thanh chính xác. Kể từ Android 14, bạn cần có sự cho phép của người dùng để truy cập vào vị trí chính xác của họ ở chế độ nền. Theo mặc định, nếu một ứng dụng không có quyền truy cập dữ liệu 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 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, Navigation SDK sẽ xử lý SecurityException
này mà không ảnh hưởng đến ứng dụng, cho phép hoạt động chỉ đường tiếp tục chạy ở chế độ nền. Ngoài ra, Navigation SDK còn có 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 người dùng không nhận được thông báo trước khi ứng dụng chuyển sang chế độ nền, thì Navigation SDK 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 và dẫn đến trải nghiệm điều hướng dưới mức 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 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à Navigation SDK 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".