Sử dụng Location Permission trên android cũ và mới.

Phương pháp đầy đủ nhất khi sử dụng LOCATION Permission trên android.

Vị trí hiện tại đã trở thành dữ liệu nhạy cảm, Android hạn chế việc sử dụng nó, đặc biệt là trong các ứng có tác vụ nền.

Ở bài viết này mình sẽ hướng dẫn các bạn tất cả các bước và các lưu ý khi sử dụng quyền Location.

  1. Chính sách của Google Play – Khai báo quyền và thông báo công khai trong ứng dụng

Như đã nói ở trên việc sử dụng quyền location là vấn đề nhạy cảm, chính vì thế Google đã y/c các nhà phát triển phải tiến hành giải thích cho người dùng trước khi tiến hành xin quyền.

2. Thực hiện xin quyền cho tất cả các phiên bản android

val permissions = arrayOf(
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION
        )
requestLocationPermissionLauncher.launch(permissions)

Xử lý kết quả sau khi thực hiện xin quyền.

    /*
    * Receive result when request location permission.
    * */
    private val requestLocationPermissionLauncher =
        registerForActivityResult(
            ActivityResultContracts.RequestMultiplePermissions()
        ) { permissions ->
            var isGranted = true
            permissions.entries.forEach {
                if (it.value == false) {
                    isGranted = false
                    return@registerForActivityResult
                }
            }
            if (isGranted) {
                // Check background permission android Q
                checkPermissionAndroidQ()
            } else {
                // Continue run app no permission.
            }
        }

3. Thực hiện yêu cầu cập nhật quyền background từ android Q

Nhà phát triển sẽ dẫn người dùng đến trang Setting của hệ thống để chọn các cấp độ sử dụng dữ liệu.

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            if (LocationPermissionUtils.isBackgroundLocationGranted(this)) {
                // Continue run app flow
            } else {
                LocationPermissionUtils.openSettingBackgroundMode(requestPermissionAndroidQ)
            }

        } else {
            // Continue run app flow
        }

Xử lý logic sau khi cập nhật quyền.


    /*
     * Receive result when request background permission
     * */
    private val requestPermissionAndroidQ =
        registerForActivityResult(
            ActivityResultContracts.RequestPermission()
        ) { _: Boolean ->
            // We just receive action when user close screen setting background mode.
            // Continue run app flow
        }

Note: Ngoài ra khi dùng quyền location chúng ta sẽ quan tâm đến GPS của điện thoai, sau các bước trên nhà phát triển nên kiểm tra gps để vị trí nhận đc chính xác hơn.

 /*
    * Check gps is enable
    * */
    fun isGpsEnabled(context: Context): Boolean {
        val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
        return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
    }

    /*
    * Intent open system setting gps
    * */
    fun openSettingGps(context: Context, result: ActivityResultLauncher<Intent>) {
        val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
        result.launch(intent)
    }

Full sample github.

Nguyễn Linh

Chia sẻ để cùng tiến bộ...