你的位置:首页 > 操作系统

[操作系统]Android Studio下加入百度地图的使用(二)——定位服务


上一章(http://www.cnblogs.com/jerehedu/p/4891216.html)中我们已经完成了环境的搭建,这一章我们来研究一下如何使用。

第一步:在

 <uses-permission android:name="android.permission.INTERNET" />  <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />  <uses-permission android:name="android.permission.WAKE_LOCK" />  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  <uses-permission android:name="android.permission.WRITE_SETTINGS" />  <!-- 这个权限用于进行网络定位-->  <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.ACCESS_WIFI_STATE"/>  <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>  <!-- 用于读取手机当前的状态-->  <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  <!-- 访问网络,网络定位需要上网-->  <uses-permission android:name="android.permission.INTERNET" />  <!-- SD卡读取权限,用户写入离线定位数据-->  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  <!--允许应用读取低级别的系统日志文件 --><uses-permission android:name="android.permission.READ_LOGS"/> <uses-permission android:name="android.permission.INTERNET" />  <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />  <uses-permission android:name="android.permission.WAKE_LOCK" />  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  <uses-permission android:name="android.permission.WRITE_SETTINGS" />  <!-- 这个权限用于进行网络定位-->  <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.ACCESS_WIFI_STATE"/>  <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>  <!-- 用于读取手机当前的状态-->  <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  <!-- 访问网络,网络定位需要上网-->  <uses-permission android:name="android.permission.INTERNET" />  <!-- SD卡读取权限,用户写入离线定位数据-->  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  <!--允许应用读取低级别的系统日志文件 --><uses-permission android:name="android.permission.READ_LOGS"/>

第二步: 在布局文件中添加地图控件

<LinearLayout ="http://schemas.android.com/apk/res/android"  ="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical"  tools:context=".MainActivity">  <TextView android:text="百度地图"    android:layout_width="match_parent"    android:gravity="center"    android:layout_height="wrap_content"    android:textSize="25sp"    android:id="@+id/textView" />  <com.baidu.mapapi.map.MapView    android:id="@+id/baiDuMv"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:clickable="true" /></LinearLayout>

第三步: 在Activity的OnCreate方法中加入初始化语句

//此方法要再setContentView方法之前实现    SDKInitializer.initialize(getApplicationContext());

第四步: 加入生命周期管理,达到节省模式。

  @Override  protected void onStop()  {    locationClient.stop();    super.onStop();  }  @Override  protected void onDestroy()  {    super.onDestroy();    // 在activity执行onDestroy时执行mMapView.onDestroy()    mMapView.onDestroy();    mMapView = null;  }  @Override  protected void onResume()  {    super.onResume();    // 在activity执行onResume时执行mMapView. onResume ()    mMapView.onResume();  }  @Override  protected void onPause()  {    super.onPause();    // 在activity执行onPause时执行mMapView. onPause ()    mMapView.onPause();}

效果图:

以下为完整代码:

package com.jerehedu.administrator.baidumapapplication;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationConfigeration;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;public class MainActivity extends Activity {  private MapView mMapView;  private LocationClient locationClient;  private BaiduMap baiduMap;  private boolean firstLocation;  private BitmapDescriptor mCurrentMarker;  private MyLocationConfigeration config;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    //此方法要再setContentView方法之前实现    SDKInitializer.initialize(getApplicationContext());    setContentView(R.layout.activity_main);    mMapView =(MapView)findViewById(R.id.baiDuMv);    baiduMap = mMapView.getMap();    MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15f);    baiduMap.setMapStatus(msu);    // 定位初始化    locationClient = new LocationClient(this);    firstLocation =true;    // 设置定位的相关配置    LocationClientOption option = new LocationClientOption();    option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);    option.setOpenGps(true);    option.setCoorType("bd09ll"); // 设置坐标类型    option.setScanSpan(1000);    locationClient.setLocOption(option);    // 设置自定义图标    BitmapDescriptor myMarker = BitmapDescriptorFactory        .fromResource(R.drawable.navi_map);    MyLocationConfigeration config = new MyLocationConfigeration(        MyLocationConfigeration.LocationMode.FOLLOWING, true, myMarker);    locationClient.registerLocationListener(new BDLocationListener() {      @Override      public void onReceiveLocation(BDLocation location) {        // map view 销毁后不在处理新接收的位置        if (location == null || mMapView == null)          return;        // 构造定位数据        MyLocationData locData = new MyLocationData.Builder()            .accuracy(location.getRadius())             // 此处设置开发者获取到的方向信息,顺时针0-360            .direction(100).latitude(location.getLatitude())            .longitude(location.getLongitude()).build();        // 设置定位数据        baiduMap.setMyLocationData(locData);        // 第一次定位时,将地图位置移动到当前位置        if (firstLocation)        {          firstLocation = false;          LatLng xy = new LatLng(location.getLatitude(),              location.getLongitude());          MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(xy);          baiduMap.animateMapStatus(status);        }      }    });  }  @Override  protected void onStart()  {    // 如果要显示位置图标,必须先开启图层定位    baiduMap.setMyLocationEnabled(true);    if (!locationClient.isStarted())    {      locationClient.start();    }    super.onStart();  }  @Override  protected void onStop()  {    // 关闭图层定位    baiduMap.setMyLocationEnabled(false);    locationClient.stop();    super.onStop();  }  @Override  protected void onDestroy()  {    super.onDestroy();    // 在activity执行onDestroy时执行mMapView.onDestroy()    mMapView.onDestroy();    mMapView = null;  }  @Override  protected void onResume()  {    super.onResume();    // 在activity执行onResume时执行mMapView. onResume ()    mMapView.onResume();  }  @Override  protected void onPause()  {    super.onPause();    // 在activity执行onPause时执行mMapView. onPause ()    mMapView.onPause();  }}

这样就实现了简单的定位和显示功能,当然还有更多的功能需要我们结合API文档一点一点学习。

 

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:JRedu技术交流
 



去法国旅游攻略法国六日游行程安排参考去法国旅游跟团行程法国旅游护照签证法国旅游路线报价费用玄真漂流小孩能漂吗?清远玄真漂流多大小孩可以玩? 猛虎峡漂流勇士漂多少公里?台山猛虎峡勇士漂全长多少? 台山富都猛虎峡勇士漂多少钱?富都猛虎峡勇士漂攻略? 猛虎峡勇士漂流门票包含大巴吗?台山猛虎峡勇士漂流多少钱? 2015深圳欢乐谷七夕过山车婚礼时间?欢乐谷七夕怎么过? 深圳欢乐谷过山车婚礼什么时候举办?欢乐谷七夕过山车婚礼几号开始? 三亚旅游攻略 三亚旅游攻略自由行避暑方法 盘点全球最难抵达的酒店(图) 文笔峰门票优惠政策?海南文笔峰套票多少钱? 文笔峰半价票怎么买?海南文笔峰门票在哪买便宜? 文笔峰海南身份证有优惠吗?定安文笔峰凭海南身份证半价吗? 文笔峰门票团购价格?海南文笔峰网上预订有优惠吗? 菲律宾刺绣 爱情开始的地方 印度阿格拉红堡(组图) 印度孟买游记 菲律宾沙龙娱乐度假村 ISL9005AIRNZ-T Datasheet ISL9005AIRNZ-T Datasheet ISL9005AIRRZ-T Datasheet ISL9005AIRRZ-T Datasheet ISL9005IRCZ-T Datasheet ISL9005IRCZ-T Datasheet 大庆到港澳游报价 大庆到港澳游报价 大庆到港澳游报价 大兴安岭去香港游报价 大兴安岭去香港游报价 大兴安岭去香港游报价 哈尔宾港澳游报价 哈尔宾港澳游报价 哈尔宾港澳游报价