星空网 > 软件开发 > 操作系统

Android Studio下加入百度地图的使用(二)——定位服务

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

第一步:在

 <uses-permission android:name="android.permission.INTE.NET" />  <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();}

效果图:

Android Studio下加入百度地图的使用(二)——定位服务images/loading.gif' data-original="http://images2015.cnblogs.com/blog/708076/201510/708076-20151019133036411-947111826.png" width="300" />

以下为完整代码:

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/ 
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:Android Studio下加入百度地图的使用(二)——定位服务
 



原标题:Android Studio下加入百度地图的使用(二)——定位服务

关键词:Android

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

手持1.3亿美元,推动中东先买后付新支付趋势!:https://www.kjdsnews.com/a/668562.html
亚马逊要的电费账单什么样子?亚马逊账单要求:https://www.kjdsnews.com/a/668563.html
Coupang佣金是多少,Coupang哪个品类佣金低?:https://www.kjdsnews.com/a/668564.html
Amy聊跨境:最新最全,独家整理!法国&德国EPR知识点合集和专业解读(2):https://www.kjdsnews.com/a/668565.html
7招教你速提亚马逊销量!:https://www.kjdsnews.com/a/668566.html
跨境电商独立站,你不可忽视的网站落地页Landing Page7个误区。:https://www.kjdsnews.com/a/668567.html
长治婚庆女司仪和主持人:https://www.vstour.cn/a/366176.html
北京丰台区水上乐园哪家好玩?:https://www.vstour.cn/a/366177.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流