基于地图的短信追踪小练习(2)百度地图定位到自己的位置

来源:互联网 发布:fpga用什么软件 编辑:程序博客网 时间:2024/05/20 03:41

注:本篇文章关于定位到自己位置和获取经纬度的代码部分参考自《第一行代码》

百度地图是可以定位经纬度,也可以拖拽地图的,而且默认是在北京天安门。

我们可以直接设置经纬度(设置经纬度用LatLng类)

比如:

LatLng point = new LatLng(39.963175, 116.400244);  

我们这里要实现的是定位到自己所在的位置。核心的逻辑是定位到自己所在的经纬度,用获取到的经纬度设置地图的显示位置。

百度地图的api提供了一个BaiduMap类,它是地图的总控制器,调用MapView的getMap()方法就能获取到BaiduMap。

 mMapView = (MapView) findViewById(R.id.bmapView       mBaiduMap = mMapView.getMap();

之后我们就要获取位置提供器

这里多设置几个toast,以便在这里出现问题的话,准确的分析出代码的执行情况,后面真的就用到了!

       locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);       List<String> providerList = locationManager.getProviders(true);       if(providerList.contains(LocationManager.GPS_PROVIDER))       {       provider = LocationManager.GPS_PROVIDER;       Toast.makeText(this, "gps use", Toast.LENGTH_SHORT).show();       }       else if(providerList.contains(LocationManager.NETWORK_PROVIDER))       {       provider = LocationManager.NETWORK_PROVIDER;       Toast.makeText(this, "net to use", Toast.LENGTH_SHORT).show();       }       else       {       Toast.makeText(this, "No location provider to use", Toast.LENGTH_SHORT).show();       return;       }       location = locationManager.getLastKnownLocation(provider);
我们这里获取到了location对象,之后应该是要进一步的提取出信息,并设置。我们将location对象传入navigateTo方法。

if(location != null)       {       navigateTo(location);       }

然后调用MapStatusUpdateFactory的newLatLng()方法将LatLng对象传入,返回的是一个MapStatusUpdate对象,再把这个对象传入animateMapStatus()就可以将地图定位到指定的经纬度。

LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());    MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);    mBaiduMap.animateMapStatus(update);

以上是核心逻辑的流程和实现。

遇到问题:

运行之后定位还是在默认的北京,没有定位到自己的位置。但是toast出了

No location provider to use
说明没有位置提供器,发现gps是打开的,代码出问题的可能性低,最后发现可能是权限问题,使用了更全的权限之后,问题解决、

充分说明了设置输出的重要性

第二个,在测试时,有一台手机权限完整之后,仍然定位到北京,最后走出室外之后,成功定位。


0 0
原创粉丝点击