用高德获取当前位置
时间: 2023-06-28 15:04:01 浏览: 144
可以使用高德地图提供的定位功能来获取当前位置。以下是使用高德地图 SDK 获取当前位置的示例代码(使用 Android 平台):
首先,在项目的 build.gradle 文件中添加以下依赖:
```
implementation 'com.amap.api:location:x.y.z' // 版本号根据实际情况填写
```
然后,在需要获取当前位置的 Activity 中,可以按照以下方式来实现:
```java
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.widget.Toast;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
public class MainActivity extends AppCompatActivity implements AMapLocationListener {
private static final int REQUEST_CODE_PERMISSION_LOCATION = 100;
private AMapLocationClient mLocationClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 检查定位权限是否已经授权
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
// 如果没有授权,则向用户请求定位权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_CODE_PERMISSION_LOCATION);
} else {
// 如果已经授权,则开始定位
startLocation();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// 在 Activity 销毁时停止定位
if (mLocationClient != null) {
mLocationClient.stopLocation();
mLocationClient.onDestroy();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE_PERMISSION_LOCATION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 如果用户授权了定位权限,则开始定位
startLocation();
} else {
// 如果用户拒绝了定位权限,则弹出 Toast 提示
Toast.makeText(this, "没有定位权限,无法获取当前位置", Toast.LENGTH_SHORT).show();
}
}
}
private void startLocation() {
// 创建一个 AMapLocationClient 的实例
mLocationClient = new AMapLocationClient(this);
// 配置定位参数
AMapLocationClientOption locationOption = new AMapLocationClientOption();
locationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
locationOption.setNeedAddress(true);
mLocationClient.setLocationOption(locationOption);
// 设置定位监听器
mLocationClient.setLocationListener(this);
// 开始定位
mLocationClient.startLocation();
}
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
// 定位成功,获取当前位置的经纬度信息
double latitude = aMapLocation.getLatitude();
double longitude = aMapLocation.getLongitude();
Toast.makeText(this, "当前位置:(" + latitude + ", " + longitude + ")", Toast.LENGTH_SHORT).show();
} else {
// 定位失败,弹出 Toast 提示
Toast.makeText(this, "定位失败:" + aMapLocation.getErrorInfo(), Toast.LENGTH_SHORT).show();
}
}
}
}
```
在上述代码中,首先检查是否已经授权定位权限。如果没有授权,则向用户请求该权限。如果已经授权,则创建一个 AMapLocationClient 对象,并配置定位参数及定位监听器。然后调用 startLocation() 方法开始定位。在定位成功时,通过 AMapLocation 对象获取当前位置的经纬度信息。如果定位失败,则弹出 Toast 提示。
阅读全文