Giới thiệu
Ví dụ này minh họa cách lấy tọa độ GPS hiện tại (vĩ độ, kinh độ) trong Android, bao gồm xin quyền runtime và kiểm tra GPS đã bật chưa.
Các bước thực hiện
Bước 1: Tạo dự án mới
Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.
Bước 2: Layout (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<TextView
android:id="@+id/showLocation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Vị trí"
android:textSize="24sp" />
<Button
android:id="@+id/btnGetLocation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Lấy vị trí" />
</LinearLayout>
Bước 3: Code lấy vị trí (MainActivity.java)
import android.Manifest;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationManager;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_LOCATION = 1;
Button btnGetLocation;
TextView showLocation;
LocationManager locationManager;
String latitude, longitude;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Xin quyền runtime
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);
showLocation = findViewById(R.id.showLocation);
btnGetLocation = findViewById(R.id.btnGetLocation);
btnGetLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
onGPS();
} else {
getLocation();
}
}
});
}
private void onGPS() {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Bật GPS")
.setCancelable(false)
.setPositiveButton("Có", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
})
.setNegativeButton("Không", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
final AlertDialog alertDialog = builder.create();
alertDialog.show();
}
private void getLocation() {
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);
} else {
Location locationGPS = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (locationGPS != null) {
double lat = locationGPS.getLatitude();
double longi = locationGPS.getLongitude();
latitude = String.valueOf(lat);
longitude = String.valueOf(longi);
showLocation.setText("Vị trí của bạn: \n" + "Vĩ độ: " + latitude + "\n" + "Kinh độ: " + longitude);
} else {
Toast.makeText(this, "Không tìm thấy vị trí.", Toast.LENGTH_SHORT).show();
}
}
}
}
Bước 4: Manifest với quyền (AndroidManifest.xml)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Chạy ứng dụng
Kết nối thiết bị, nhấn Run. Cấp quyền vị trí, bật GPS nếu cần, sau đó nhấn nút "Lấy vị trí".


Lưu ý quan trọng: Từ Android 10 (API 29), cần quyền ACCESS_BACKGROUND_LOCATION để lấy vị trí khi app chạy nền. Cân nhắc dùng FusedLocationProviderClient (Google Play Services) cho chính xác và tiết kiệm pin hơn.