1.布局文件
2.声明权限
3.android 6以上需要动态请求权限
if(ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},1);
}
4.获取LocationManager实例
locationManage = (LocationManager) getSystemService(LOCATION_SERVICE);
5.设置定位准则
Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_COARSE);//粗略精度 criteria.setAltitudeRequired(false);//是否需要返回海拔信息 criteria.setBearingRequired(false);//是否需要返回方向信息 criteria.setCostAllowed(true); //是否允许付费服务 criteria.setPowerRequirement(Criteria.ACCURACY_HIGH); //电量消耗等级 criteria.setSpeedRequired(false); //是否需要返回速度信息
6.获取Location 实例
String currentProvider = locationManage.getBestProvider(criteria,true); location = locationManage.getLastKnownLocation(currentProvider);//获取最后一次位置信息
7.设置LocationListener监听
LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
getLocationInfo(location);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
locationManage.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,
0,locationListener);
8.获取定位信息
private void getLocationInfo(Location location) {
if(location != null){
double lag = location.getLatitude();
double lng = location.getLongitude();
double speed = location.getSpeed();
float acc = 0;
if(location.hasAccuracy()){
acc = location.getAccuracy();
}
double height = 0;
if(location.hasAltitude()) {
height = location.getAltitude();
}
float bear = 0;
if(location.hasBearing()){
bear = location.getBearing();
}
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("经纬度是: ")
.append(lag)
.append("\n")
.append("纬度是: ")
.append(lng)
.append("\n速度是: ")
.append(speed)
.append("\n精度是: ")
.append(acc)
.append("\n高度是: ")
.append(height)
.append("\n风向是: ")
.append(bear);
tv_location.setText(stringBuilder.toString());
}else {
tv_location.setText("没有获取到信息");
}
}
