在 Android 中实现谷歌定位(Google Location Services),你需要使用 Google Play Services 提供的 Fused Location Provider API(融合定位提供程序)。这个 API 提供了一个高效且易于使用的方法来获取设备的位置信息。以下是基本的实现步骤:
---
✅ 一、准备工作
1. 确保项目使用了 Google Play Services
在 `build.gradle`(Module 级别)中添加:
```groovy
implementation 'com.google.android.gms:play-services-location:21.0.1'
```
2. 配置权限(在 `AndroidManifest.xml` 中):
```xml
```
3. 动态权限请求(Android 6.0+ 必须):
```java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
1);
}
```
---
✅ 二、获取位置的代码实现
1. 初始化 FusedLocationProviderClient
```java
FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
```
2. 获取最后一次已知位置:
```java
fusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener
@Override
public void onSuccess(Location location) {
if (location != null) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
Log.d("Location", "Lat: " + latitude + ", Lng: " + longitude);
}
}
});
```
3. 或者实时位置更新(可选):
```java
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setInterval(10000);
locationRequest.setFastestInterval(5000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationCallback locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult == null) {
return;
}
for (Location location : locationResult.getLocations()) {
Log.d("Location", "Lat: " + location.getLatitude() + ", Lng: " + location.getLongitude());
}
}
};
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper());
```
---
✅ 三、注意事项
- 要测试 Google 定位,设备必须安装 Google Play 服务。
- 如果在国内开发,部分国产系统或模拟器可能不支持 Google 服务,可使用 [高德](https://lbs.amap.com/) 或 [百度定位 SDK] 作为替代。
- 使用真实设备测试效果更佳。
---
如果你是用 Kotlin 或 Jetpack Compose 开发,或者需要我提供一个完整的 Activity 示例,我也可以写一份给你~
你现在是要做什么样的定位?实时、打卡定位,还是地图打点?我可以根据你的应用场景帮你更精细地写。