两种方法
第一种
获取定位权限
//判断gps是否打开
private boolean isGpsAble(LocationManager lm) {
return lm.isProviderEnabled(LocationManager.GPS_PROVIDER) ? true : false;
}
//让用户自己设置
private void openGps() {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, 0);
}
//定义更新显示的方法
private void updateaddress(Location location) {
if (location != null) {
StringBuilder sb = new StringBuilder();
sb.append("当前位置信息:\n");
sb.append("经度:" + location.getLongitude() + "\n");
sb.append("纬度:" + location.getLatitude() + "\n");
sb.append("高度:" + location.getAltitude() + "\n");
sb.append("风速:" + location.getSpeed() + "\n");
sb.append("风向:" + location.getBearing() + "\n");
sb.append("定位精度:" + location.getAccuracy() + "\n");
tv_address.setText(sb.toString());
} else tv_address.setText("");
}
//获取位置
private void getaddress() {
if (!isGpsAble(locationManager)) {
Toast.makeText(this, "请打开GPS", Toast.LENGTH_SHORT).show();
openGps();
}
//从gps获取最近的定位信息
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 3);
return;
}
Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
updateaddress(location);
//设置间隔两秒获得一次位置信息
locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 2000, 8, new LocationListener() {
@Override
public void onLocationChanged(Location location) {
//gps位置改变更新定位
updateaddress(location);
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String provider) {
//当gps可用,更新定位
if (ActivityCompat.checkSelfPermission(AddressActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(AddressActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
updateaddress(locationManager.getLastKnownLocation(provider));
}
@Override
public void onProviderDisabled(String s) {
updateaddress(null);
}
});
}
第二种
前提:下载LBS SDK 开发包,不解压将libs下BaiduLBS_Android.jar包复制到模块libs下
同样先动态获取权限ACCESS_FINE_LOCATION;READ_PHONE_STATE;WRITE_EXTERNAL_STORAGE
内部类实现
public class MyLoactionListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
runOnUiThread(new Runnable() {
@Override
public void run() {
StringBuilder currentPosition = new StringBuilder();
currentPosition.append("纬度:").append(bdLocation.getLatitude()).append("\n");
currentPosition.append("经度:").append(bdLocation.getLongitude()).append("\n");
currentPosition.append("国家:" + bdLocation.getCountry() + "\n");
currentPosition.append("省:" + bdLocation.getProvince() + "\n");
currentPosition.append("市:" + bdLocation.getCity() + "\n");
currentPosition.append("县:" + bdLocation.getDistrict() + "\n");
currentPosition.append("街道:" + bdLocation.getStreet() + "\n");
tv_address.setText(currentPosition);
}
});
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_address);
init();
// getaddress();
LocationClientOption option = new LocationClientOption();
option.setScanSpan(5000);
option.setIsNeedAddress(true);
mLocationClient=new LocationClient(getApplicationContext());
mLocationClient.setLocOption(option);
mLocationClient.registerLocationListener(new MyLoactionListener());
mLocationClient.start();
}