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í "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 thông tin vị trí của người dùng. Navigation SDK (SDK điều hướng) bao gồm quyền này trong tệp kê khai của mình, vì vậy, 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à chưa đủ để truy cập vào thông tin vị trí ở chế độ nền. Vì vậy, 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 thông tin 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 thông tin 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.

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 bài viết Yêu cầu quyền truy cập thông tin vị trí | Cảm biến và thông tin 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 đến, 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ọ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 giữ hoạt động khi không còn cần đến, điều này có thể dẫn đến tình trạng hao pin và có thể rò rỉ bộ nhớ.

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

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. 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 hạn chế mới được đưa ra trong Android 14

Android 14 (Android U) đã đưa ra các hạn chế mới đối với các ứng dụng truy cập vào 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 thông tin vị trí ở chế độ nền. Bạn cũng nên cập nhật quá trình triển khai để đảm bảo rằng ứ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.

Tác động của những 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 điều hướng từng chặng. Tính năng điều hướng từng chặng phụ thuộc vào khả năng truy cập vào 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, việc truy cập vào thông tin vị trí chính xác của người dùng ở chế độ nền yêu cầu người dùng cấp quyền. Theo mặc định, nếu một ứng dụng không có quyền của người dùng để truy cập thông tin vị trí ở chế độ nền 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, Navigation SDK xử lý SecurityException này mà không ảnh hưởng đến ứng dụng, cho phép tiếp tục chạy tính năng điều hướng ở chế độ nền. Ngoài ra, Navigation SDK còn 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ì quá trình hợp nhất Gradle sẽ xử lý quyền này. Tuy nhiên, nếu một thông báo không được hiển thị cho người dùng trước khi ứng dụng chuyển sang chạy ở 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ị trí. Những thông tin 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 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 thông tin vị trí cho tính năng điều hướ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 bài viết Yêu cầu quyền truy cập thông tin vị trí "Luôn cho phép" permissions.