1、在配置文件里添加<uses-permission>标签
android:name="android.permission.ACCESS_FINE_LOCATION"
或者是
android:name="android.permission.ACCESS_COARSE_LOCATION"
(GPS提供器要求fine权限,而网络提供器只要求coarse权限)
2、获得位置管理器
LocationManager locationManager=(LocationManager)getSystem(Context.LOCATION_SERVICE);
3、指定提供器类型
String provider=LocationManager.GPS_PROVIDER;
还可以通过获得位置提供器来获取位置信息
即
获得位置提供器
(1)根据名称获得位置提供器
String provider=LocationManager.GPS_PROVIDER;
LocationProvider myProvider=locationManager.getProvider(provider);
(2)获得当前可用的位置提供器
List<String> providers=locationManager.getProviders(true);
(3)根据Criteria条件获得位置提供器
Criteria封装了locationProvider的条件(费用、耗电量、精确度、方位、速度、高度)
属性或访求名称 | 描述 |
ACCERACY_COARSE | 粗糙精确度 |
ACCURACY_FINE | 较高精确度 |
POWER_HING | 用电高 |
POWER_LOW | 用电低 |
isAlititudeRequried() | 返回Provider是否需要高度信息 |
isBearingRequired() | 返回Provider是否需要方位信息 |
isSpeedRequried() | 返回Provider是否需要速度信息 |
isCostAllowed() | 是否允许产生费用 |
setAccuracy(int accuracy) | 设置Provider的精确度 |
setAltitudeRequired (boolean altitudeRequired) | 设置Provider是否需要高度信息 |
setBearingRequired (boolean bearingRequired) | 设置Provider是否需要方位信息 |
setCostAllowed (boolean costAllowed) | 设置Provider是否产生费用 |
setSpeedAccuracy (int accuracy) | 设置Provider是否需要速度信息 |
getAccuracy() | 获得精度 |
下面代码是根据条件获得LocationProvider
//根据条件获得LocationProvider
//实例化Criteria
Criteria criteria=new Criteria();
//设置精确度
criteria.setAccuracy(Criteria.ACCURACY_FINE);
//设置高度信息
criteria.setAltitudeRequired(false);
//设置方位信息
criteria.setBearingRequired(true);
//设置是否需要产生费用
criteria.setCostAllowed(true);
//设置电量耗费
criteria.setPowerRequirement(Criteria.POWER_LOW);
//获得符合条件最好的Provider
String provider=locationManager.getBestProvider(criteria, true);
//获得符合条件的Provider
List<String> matchingProviders=locationManager.getProviders(critria,false);
4、获得位置信息(上一次存在的位置信息,如果没有返回null)
Location location=locationManager.getLastKnownLocation(provider);
其中可以提取位置信息的经纬度:
double lat=location.getLatitude();//获得经度信息
double lng=location.getLongitude();//获得未读信息
//每2秒钟监听,并且移动距离超过10米才会触发
locationManager.requestLocationUpdates(provider,2000,10,locationListener);
6、编写监听器locationListener
private final LocationListener locationListener = new LocationListener() {
//状态改变时调用
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
//Provider生效时调用
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
//Provider失效时调用
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
updateWithNewLocation(null);
}
//位置改变时调用
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
updateWithNewLocation(location);
}
};
7、updateWithNewLocation方法
private void updateWithNewLocation(Location location) {
// TODO Auto-generated method stub
String latLongString;
TextView myLocationText;
myLocationText=(TextView) findViewById(R.id.myLocationText);
if (location!=null) {
double lat=location.getLatitude();
double lng=location.getLongitude();
latLongString="Lat:"+lat+"\nLong:"+lng;
} else {
latLongString="No Location found";
}
myLocationText.setText("您当前的位置:\n"+latLongString);
}