Android之百度地图系列教程三:定位 发表于 2017-03-20 | 分类于 Android , 百度地图 | | 阅读次数 如果你很在意别人的评价,要么是你站得不够高,要么你是在做淘宝 添加权限123456789<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!-- 这个权限用于进行网络定位 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- 这个权限用于访问GPS定位 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 --><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 添加百度定位回调service12345<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" ></service> 封装后的百度定位类BaiduLocation123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135package io.github.zane.carinteraction;import android.content.Context;import android.util.Log;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;/** * Created by Zane on 2017/7/17. */public class BaiduLocation { /** * 经度 * */ public static double mylongitude = -1.0; /** * 纬度 * */ public static double mylatitude = -1.0; /** * 城市 */ public static String myCity = null; /** * 街道 */ public static String myCityadd = null; /** * 回调经纬度方法 * * @param myLocationListener */ public static void setMyLocationListener(MyLocationListener myLocationListener) { BaiduLocation.myLocationListener = myLocationListener; } public static MyLocationListener myLocationListener; /** * 回调经纬度的接口定义 * * @author Administrator * */ public static interface MyLocationListener { public void myLocatin(double mylongitude, double mylatitude, String city, String street); }; /** * 获取当前经纬度 * * @param context */ public static void getLocation(Context context) { final LocationClient locationClient = new LocationClient(context); // 设置定位条件 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 是否打开GPS option.setCoorType("bd09ll"); // 设置返回值的坐标类型。 option.setPriority(LocationClientOption.NetWorkFirst); // 设置定位优先级 option.setProdName("CarInteraction"); // 设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。 option.setScanSpan(5000); // 设置定时定位的时间间隔。单位毫秒 option.setAddrType("all");// 显示所有信息,街道 locationClient.setLocOption(option); // 注册位置监听器 locationClient.registerLocationListener(new BDLocationListener() { @Override public void onReceiveLocation(BDLocation location) { // TODO Auto-generated method stub if (location == null) { return; } Log.d("baidulocation", "baidulocation1"); // sb.append("Time : "); // sb.append(location.getTime()); // sb.append("\nError code : "); // sb.append(location.getLocType()); // sb.append("\nLatitude : "); // sb.append(location.getLatitude()); // sb.append("\nLontitude : "); // sb.append(location.getLongitude()); // sb.append("\nRadius : "); // sb.append(location.getRadius()); // if (location.getLocType() == BDLocation.TypeGpsLocation){ // sb.append("\nSpeed : "); // sb.append(location.getSpeed()); // sb.append("\nSatellite : "); // sb.append(location.getSatelliteNumber()); // } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) { // sb.append("\nAddress : "); // sb.append(location.getAddrStr()); String district = location.getAddress().district; myCityadd = location.getAddrStr(); myCity = location.getCity(); mylongitude = location.getLongitude(); mylatitude = location.getLatitude(); Log.d("baidulocation", mylongitude+"\n"+mylatitude+"\n"+ myCity+"\n"+district); // 经纬度 if (myLocationListener != null) { myLocationListener.myLocatin(mylongitude, mylatitude, myCity, district); //TODO 停止实时定位// locationClient.stop(); } } } @Override public void onConnectHotSpotMessage(String s, int i) { } }); locationClient.start(); /* * 当所设的整数值大于等于1000(ms)时,定位SDK内部使用定时定位模式。调用requestLocation( * )后,每隔设定的时间,定位SDK就会进行一次定位。如果定位SDK根据定位依据发现位置没有发生变化,就不会发起网络请求, * 返回上一次定位的结果;如果发现位置改变,就进行网络请求进行定位,得到新的定位结果。 * 定时定位时,调用一次requestLocation,会定时监听到定位结果。 */ locationClient.requestLocation(); Log.d("baidulocation", "baidulocation"); }} 使用封装类进行定位12345678910111213141516171819202122232425262728BaiduLocation.getLocation(this);BaiduLocation.setMyLocationListener(new BaiduLocation.MyLocationListener(){ @Override public void myLocatin(double mylongitude, double mylatitude, String city, String street) { mBaiduMap.clear(); LatLng ll = new LatLng(mylatitude, mylongitude); // 按照经纬度确定地图位置 if (ifFrist) { MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll); // 移动到某经纬度 mBaiduMap.animateMapStatus(update); update = MapStatusUpdateFactory.zoomBy(8f); // 放大 mBaiduMap.animateMapStatus(update); ifFrist = false; } // 显示个人位置图标 MyLocationData.Builder builder = new MyLocationData.Builder(); builder.latitude(mylatitude); builder.longitude(mylongitude); MyLocationData data = builder.build(); mBaiduMap.setMyLocationData(data); MarkerOptions ooA = new MarkerOptions().position(ll).icon(BitmapDescriptorFactory.fromResource(R.mipmap.pin_icon)).zIndex(9).draggable(true); mBaiduMap.addOverlay(ooA); }}); 坚持原创技术分享,您的支持将鼓励我继续创作! 赏 微信打赏 支付宝打赏