Tài liệu tham khảo định vị: https://developer.android.com/training/location

Bước 1: Copy permission cho vào Mainifest:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-permission android:name="android.permission.INTERNET" />

Bước 2: Khai báo đối tượng để nhận trạng thái khi hộp thoại cấp quyền đóng lại:

Code này để ở phạm vi class, để bên ngoài hàm onCreate nhé.


ActivityResultLauncher<String[]> locationPermissionRequest =
        registerForActivityResult(new ActivityResultContracts
                        .RequestMultiplePermissions(), result -> {
                    Boolean fineLocationGranted = result.getOrDefault(
                            Manifest.permission.ACCESS_FINE_LOCATION, false);
                    Boolean coarseLocationGranted = result.getOrDefault(
                            Manifest.permission.ACCESS_COARSE_LOCATION,false);
                    if (fineLocationGranted != null && fineLocationGranted) {
                        // Precise location access granted.
                        Log.d(TAG, "Đã cấp quyền vị trí chính xác tuyệt đối");
                        
                    } else if (coarseLocationGranted != null && coarseLocationGranted) {
                        // Only approximate location access granted.
                        Log.d(TAG, "Đã cấp quyền vị trí chính xác tương đối");

                    } else {
                        // No location access granted.
                        Log.d(TAG, "Bị từ chối cấp quyền vị trí");
                    }
                }
        );

 

Bước 3: Thêm thư viện vào gradle

(chọn file gradle có chữ module), sau khi thêm vào cần bấm sync để tải thư viện

implementation 'com.google.android.gms:play-services-location:20.0.0'

Bước 4: Lấy vị trí

– Khai báo 1 thuộc tính ở phạm vi class:

private FusedLocationProviderClient fusedLocationClient;

– Trong hàm onCreate thực hiện khởi tạo giá trị cho thuộc tính vừa khai báo

 fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

– Trong activity thực hiện overwride lại cái hàm onResume. Trong hàm onResume viết code sau

fusedLocationClient.getLastLocation()
        .addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                // Got last known location. In some rare situations this can be null.
                if (location != null) {
                    // Logic to handle location object
                    //********* chỗ này là lấy được tọa độ, sử dụng biến location để đọc tọa độ (xem code bên dưới cuối bài viết)
                }
            }
        });

//==> bấm alt + Enter ở những chỗ báo đỏ để import các class. 
//==> ở hàm getLastLocation báo đỏ ==> alt + enter ==> add Permission Check  sẽ xổ ra code ở trước lệnh này

Khi bấm add permission check như ở trên code trên thì sẽ xổ ra đoạn code kiểm tra như sau:

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.

            // ===== hãy ghép thêm đoạn code này để hiển thị hộp thoại xin quyền
            locationPermissionRequest.launch(new String[] {
                    Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.ACCESS_COARSE_LOCATION
            });
            //=====================

            return;
        }

 

**** Code lấy tọa độ cho vào hàm onSuccess() ở trên


if (location != null) {
    // Logic to handle location object

    Log.d(TAG, "onSuccess: Tọa độ: lat = " + location.getLatitude() );
    Log.d(TAG, "onSuccess: lng = " + location.getLongitude() );

    // tạo chuỗi hiển thị trên web
    String msg1 = "Dia chi web: http://www.google.com/maps/search/?api=1&query=" + location.getLatitude() + "%2C" + location.getLongitude();
    Log.d(TAG, "Xem trên bản đồ " + msg1);

}else{
    Log.d(TAG, "onSuccess: Location null ");
}

Bước 5: Chạy ứng dụng, mở cửa sổ log ra xem kết quả.