**1.首先定义LocationMananger和Location**/** * 定位管理(位置服务) */ LocationManager locationManager; //位置 Location location;
**2、在onCreate里面初始化locationManager和location** 在初始化ocation的时候先判断是否有权限,没有权限的话就请求ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION权限,请求成功返回9
通过locationMananger.getLastKnowLocation,里面传入LocationMananger.NETWORK_PROVIDER作为参数
<pre name="code" class="java">//检查是否有权限 if (ActivityCompat.checkSelfPermission( this, android.Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED ){ ActivityCompat.requestPermissions(this, new String[]{ android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.INTERNET }, 9); return; } else { //有权限 location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if (location != null) { Log.d(TAG, location.toString()); tv_lbs.setText(location.toString()); } }
3、获得请求的结果,如果等于9,且grantResults[0]==0的话调用recreate()方法
/**
* 获得请求的结果
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.d(TAG, String.format(
"%d,%s,%s",
requestCode,
Arrays.toString(permissions),
Arrays.toString(grantResults)
));
if (requestCode == 9 && grantResults[0] == 0) {
recreate();
}
}
4、写一个位置监听器,监听位置的变化
LocationListener listener=new LocationListener() {
@Override
public void onLocationChanged(Location location) {
String text=String.format(
"类型%s\n纬度%f\n精度%f\n海拔%f\n方向%f\n速度%f",
location.getProvider(),
location.getLatitude(),
location.getLongitude(),
location.getAltitude(),
location.getBearing(),
location.getSpeed()
);
tv_lbs.setText(text);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
5、在onStart里面写请求位置的更新,并将监听器传进去
@Override
protected void onStart() {
super.onStart();
//更新
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.INTERNET
}, 9);
return;
}else {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
}
6、在onStop里面移除位置更新的监听
@Override
protected void onStop() {
super.onStop();
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}else {
//取消
locationManager.removeUpdates(listener);
}
}
这样我们就能获取到有关位置的相关信息,包括海拔,速度,方向等