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);
}
本文深入探讨了Android应用中实现定位功能的关键步骤,包括添加权限、获取位置管理器、指定提供器类型、获得位置信息以及执行位置更新监听等核心操作。详细解释了如何根据不同需求选择GPS或网络定位提供器,以及如何使用Criteria类筛选最适合当前场景的位置提供器。此外,还介绍了如何通过监听位置变化来实时更新用户位置信息。
1232

被折叠的 条评论
为什么被折叠?



