基于位置的服务:Location Based Service (LBS)。主要涉及经纬度及地图。
1. 经纬度
1.1 获取经纬度
Android 中常用三种位置提供器,GPS_PROVIDER、 NETWORK_PROVIDER 和 PASSIVE_PROVIDER。其中前两个使用较多,分别为 GPS定位和 网络定位,
- GPS定位特点: 精确度较高;耗电量多。
- 网络定位特点:精确度稍差;耗电量少。
布局文件:只需添加一个名为 position_text_view 的 TextView 用以显示获取到的经纬度。
MainActivity 代码如下:
public class MainActivity extends Activity {
private TextView positionTextView;
private LocationManager locationManager;
private String provider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
positionTextView = (TextView) findViewById(R.id.position_text_view);
// 获取LocationManager的实例
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// 获取所有可用的位置提供器
List<String> providerList = locationManager.getProviders(true);
if (providerList.contains(LocationManager.GPS_PROVIDER)) {
provider = LocationManager.GPS_PROVIDER;// GPS定位
} else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {
provider = LocationManager.NETWORK_PROVIDER;// 网络定位
} else {
// 当没有可用的位置提供器时,弹出Toast提示用户
Toast.makeText(this, "No location provider to use", Toast.LENGTH_SHORT).show();
return;
}
Location location = locationManager.getLastKnownLocation(provider);// 获取Location的对象
if (location != null) {
// 显示当前设备的位置信息
showLocation(location);
}
/**
* 四个参数含义:
* 1. 位置提供器类型
* 2. 监听时间间隔(单位:毫秒)
* 3. 监听距离间隔(单位:米)
* 4. LocationListener监听器
*/
locationManager.requestLocationUpdates(provider, 5000, 1, locationListener);// 更新位置消息
}
@Override
protected void onDestroy() {
super.onDestroy();
if (locationManager != null) {
// 关闭程序时移除监听器
locationManager.removeUpdates(locationListener);
}
}
LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// 更新当前设备的位置信息
showLocation(location);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
/**
* 显示当前设备的位置信息
*/
private void showLocation(Location location) {
String cu