Android学习笔记(十一)基于位置的服务
2016-11-30 13:50
295 查看
11.1 简介
基于位置的服务简称 LBS,主要的工作原理就是利用无线电通讯网络或 GPS 等定位方式来确定出移动设备所在的位置。有了Android系统作为载体,才得以广泛应用。11.2 找到自己的位置
11.2.1 基本用法
在Android中基于位置的服务主要借助LocationManager类来实现。基本使用方法如下:(1)获取实例
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
(2)选择一个位置提供器来确定设备的当前位置。
Android中一般有三种位置提供器可供选择:
GPS_PROVIDER:使用GPS定位,精准度较高,但非常耗电,当要求精准度高时使用。
NETWORK_PROVIDER:使用网络定位,精准度稍差,但耗电量较少,一般情况下使用更划算。
PASSIVE_PROVIDER:位置和Google搜索,使用较少,前两种使用多。
注意:定位功能必须由用户开启(设置→定位服务)。
//使用网络定位位置提供器 String provider=LocationManager.NETWORK_PROVIDER; //得到Location对象,其中包含经度、纬度、海拔等一系列位置信息 Location location=locationManager.getLastKnownLocation(provider);
(3)如果有时候想让定位精确度较高,但又不确定GPS定位是否开启,可以先判断下有哪些位置提供器可用。
//传入true表示只有启用的位置提供器才会返回 List<String> providers = locationManager.getProviders(true);
(4)另外,当设备位置发生改变时,也可以通过LocationManager的 requestLocationUpdates()方法获取到最新的位置信息,如下:
/** * param1:位置提供器的类型 * param2:监听位置发生变化的时间间隔(单位:毫秒) * param3:监听位置发生变化的距离间隔(单位:米) * param4:LocationListener监听器 */ locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, new LocationListener() { @Override public void onLocationChanged(Location location) { //每5s检查一下位置变化情况,若移动距离超过10米,则调用该方法,并把新的位置信息传入 } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } });
11.2.2 确定自己的经纬度
获取当前设备的经纬度,示例代码如下:public class MainActivity extends AppCompatActivity { private TextView positionTextView; private LocationManager locationManager; private String provider; //创建一个LocationListener监听实例 LocationListener locationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { //显示当前设备的位置信息 showLocation(location); Toast.makeText(MainActivity.this, "onLocationChanged...", Toast.LENGTH_SHORT).show(); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(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; } else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) { provider = LocationManager.NETWORK_PROVIDER; } else { //当没有位置提供器可用时,提示用户 Toast.makeText(MainActivity.this, "No Location Provider to use!", Toast.LENGTH_SHORT).show(); //结束方法 return; } @SuppressWarnings("MissingPermission") Location location = locationManager.getLastKnownLocation(provider); if (location != null) { //显示当前设备的位置信息 showLocation(location); } //实时更新 //noinspection MissingPermission locationManager.requestLocationUpdates(provider, 1000, 1, locationListener); } @Override protected void onDestroy() { super.onDestroy(); if (locationManager != null) { //移除监听器 //noinspection MissingPermission locationManager.removeUpdates(locationListener); } } private void showLocation(Location location) { String currentPosition = "latitude is:" + location.getLatitude() + "\n" + "longitude is:" + location.getLongitude(); positionTextView.setText(currentPosition); } }
记得声明权限:
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
/>
效果如下:
这一章节的内容就到这里,原著中提到的反向地理编码是通过谷歌提供的接口来实现的,由于“防火墙”等等原因,估计现在国内大多数都在使用百度地图或者高德地图提供的API,所以不再总结;至于百度地图API的应用,之前接触过,知识较多,无法一一总结,使用到的时候去查看百度API文档或者示例代码即可。
相关文章推荐
- Android学习笔记——基于位置的服务
- [转载]浅谈LBS(基于位置的服务)
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之31---LBS基于BREW的位置服务
- LBS(基于位置的服务)用户数据挖掘
- 基于即时通信和LBS技术的位置感知服务(三):搭建Openfire服务器+测试2款IM客户端
- 基于即时通信和LBS技术的位置感知服务(二):XMPP协议总结以及开源解决方案
- 浅谈LBS(基于位置的服务)
- 基于地理位置服务(LBS)技术平台
- ANDROID基于位置的服务
- 基于即时通信和LBS技术的位置感知服务(三):搭建Openfire服务器+测试2款IM客户端
- LBS(Location Based Service,基于位置的服务)
- 《BREW进阶与精通――3G移动增值业务的运营、定制与开发》连载之31---LBS基于BREW的位置服务
- [转载]推荐8个iPhone的基于地理位置服务(LBS)软件
- 三种新的商业模式:基于位置的定位服务、电子商务与创意交易平台
- 基于位置服务(Location Based Service)
- 基于移动电信的定位方法-手机定位-移动位置服务
- 物联网应用之 - 基于位置的车载网络信息服务Aha
- LBS位置服务都有那些应用? LBS(Location Based Service),中文称为基于位置服务的应用
- Android 使用基于位置的服务(二)
- 关于LBS 基于位置的服务(Location Based Service)