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ả.