使用LocationClient与Runnable获取位置信息
要使用LocationClient获取位置信息,首先需要在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
然后,在MainActivity.java文件中添加以下代码:
import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_PERMISSION = 1;
private LocationClient mLocationClient;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHandler = new Handler(Looper.getMainLooper());
// 初始化LocationClient
mLocationClient = new LocationClient(getApplicationContext());
// 设置定位监听器
mLocationClient.registerLocationListener(new MyLocationListener());
//获取权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_PERMISSION);
} else {
// 已经拥有权限,开始定位
startLocation();
}
}
/**
* 开始定位
*/
private void startLocation() {
// 开启定位
mLocationClient.start();
// 设置定位参数
LocationClientOption option = new LocationClientOption();
option.setCoorType("bd09ll");
option.setIsNeedAddress(true);
mLocationClient.setLocOption(option);
}
/**
* 停止定位
*/
private void stopLocation() {
// 停止定位
mLocationClient.stop();
}
/**
* 定位回调监听器
*/
private class MyLocationListener extends BDAbstractLocationListener {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
// 在这里处理定位结果
double latitude = bdLocation.getLatitude(); // 纬度
double longitude = bdLocation.getLongitude(); // 经度
String address = bdLocation.getAddrStr(); // 地址
Log.d("Location", "Latitude: " + latitude);
Log.d("Location", "Longitude: " + longitude);
Log.d("Location", "Address: " + address);
// 停止定位
stopLocation();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户授予了定位权限
startLocation();
} else {
// 用户拒绝了定位权限
Log.e("Location", "Permission denied");
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// 销毁LocationClient
mLocationClient.unRegisterLocationListener(new MyLocationListener());
mLocationClient = null;
}
}
在上面的代码中,我们首先初始化了LocationClient,并注册了一个BDAbstractLocationListener类型的定位监听器,用于获取定位结果。然后,在onCreate方法中,我们首先检查是否拥有定位权限,如果没有,则请求权限;如果已经拥有权限,则调用startLocation方法开始定位。
在定位结果回调的onReceiveLocation方法中,我们可以获取到定位结果的经纬度和地址信息。在这个方法中,我们还调用了stopLocation方法停止定位。
最后,我们在onDestroy方法中销毁LocationClient
原文地址: https://www.cveoy.top/t/topic/ioTJ 著作权归作者所有。请勿转载和采集!