Android之高德地图定位
2016-05-09 21:17
501 查看
最近在写天气预报的app,写完以后会将源码开源,今天先写app中用到的定位问题,现在定位的SDK有很多高德地图、百度地图、腾讯地图等,腾讯地图没有用过不予评价,高德地图和百度地图对比我觉得从开发平台的给的demo来说,高德地图给的demo中的代码可读性更强,模块整理的也很好,从准确性上说个人觉得高德地图的准确性比百度地图要好很多,以前做的项目中有个导航功能,刚开始老大说用百度地图说用户量大,精度应该也更大,可是事实却不是如此,我记得当时用到了地理编码和反地理编码,误差有时候有1-2公里(不知道现在是否已经优化),后来果断改成高德地图圆满完成导航功能。
废话不说了直接进入正题,需要用高德地图实现定位功能我们首先需要到高德地图开发平台上去下载定位SDK,然后减压以后复制到app目录下libs目录下:
![](https://img-blog.csdn.net/20160509163246875)
复制完成以后需要到build.gradle中配置如下图所示:
![](https://img-blog.csdn.net/20160509163313218)
定义AMapLocationListener
用Service来实现定位功能:
在Activity中绑定LocationService来接收位置信息
好了,这样定位功能就ok了,看下运行的图
![](https://img-blog.csdn.net/20160509163848720)
附上AMapLocation类中相关方法:
废话不说了直接进入正题,需要用高德地图实现定位功能我们首先需要到高德地图开发平台上去下载定位SDK,然后减压以后复制到app目录下libs目录下:
复制完成以后需要到build.gradle中配置如下图所示:
定义AMapLocationListener
public interface AMapLocationListener { void onLocationChanged(AMapLocation var1); }
用Service来实现定位功能:
public class LocationService extends Service implements AMapLocationListener { //声明AMapLocationClient类对象 public AMapLocationClient mLocationClient = null; //声明mLocationOption对象 public AMapLocationClientOption mLocationOption = null; private LocationBinder binder = new LocationBinder(); private ChangeLocation changeLocation; @Override public void onCreate() { initLocation(); } /** * 注册回调接口的方法,供外部调用 */ public void setChangeLocation(ChangeLocation changeLocationr) { this.changeLocation = changeLocationr; } private void initLocation() { mLocationClient = new AMapLocationClient(this.getApplicationContext()); mLocationOption = new AMapLocationClientOption(); // 设置定位模式为高精度模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); // 设置定位监听 mLocationClient.setLocationListener(LocationService.this); //设置是否返回地址信息(默认返回地址信息) mLocationOption.setNeedAddress(true); //设置是否只定位一次,默认为false mLocationOption.setOnceLocation(false); //设置是否强制刷新WIFI,默认为强制刷新 mLocationOption.setWifiActiveScan(true); //设置是否允许模拟位置,默认为false,不允许模拟位置 mLocationOption.setMockEnable(false); //设置定位间隔,单位毫秒,默认为2000ms mLocationOption.setInterval(10000); //给定位客户端对象设置定位参数 mLocationClient.setLocationOption(mLocationOption); //启动定位 mLocationClient.startLocation(); } @Override public IBinder onBind(Intent intent) { return binder; } public class LocationBinder extends Binder { public LocationService getLocationService() { return LocationService.this; } } @Override public void onDestroy() { mLocationClient.stopLocation();//停止定位 mLocationClient.onDestroy();//销毁定位客户端。 } public void onLocationChanged(AMapLocation amapLocation) { if (amapLocation != null) { changeLocation.getLocation(amapLocation); } } }
在Activity中绑定LocationService来接收位置信息
private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { LocationService.LocationBinder binder = (LocationService.LocationBinder) service; locationService = binder.getLocationService(); locationService.setChangeLocation(new ChangeLocation() { @Override public void getLocation(AMapLocation amapLocation) { if (amapLocation.getErrorCode() == 0) { Toast.makeText(MainActivity.this, amapLocation.getCity(), Toast.LENGTH_SHORT).show(); PreferenceUtil.getInstance().init(MainActivity.this); PreferenceUtil.getInstance().putString("location", amapLocation.getCity()); } else { Toast.makeText(MainActivity.this, "location Error, ErrCode:" + amapLocation.getErrorCode() + ", errInfo:" + amapLocation.getErrorInfo(), Toast.LENGTH_SHORT).show(); } } }); } mIntent = new Intent(MainActivity.this, LocationService.class); bindService(mIntent, serviceConnection, Context.BIND_AUTO_CREATE); @Override public void onServiceDisconnected(ComponentName name) { } }; @Override protected void onDestroy() { unbindService(serviceConnection); super.onDestroy(); }
好了,这样定位功能就ok了,看下运行的图
附上AMapLocation类中相关方法:
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories