上一章(http://www.cnblogs.com/jerehedu/p/4891216.html)中我们已经完成了环境的搭建,这一章我们来研究一下如何使用。
第一步:在xml文件中加入以下权限
<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 xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="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/
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:
出处:http://www.cnblogs.com/jerehedu/
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询: