当前位置: 代码迷 >> Android >> Android Studio下加入百度map的使用(二)——定位服务
  详细解决方案

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

热度:42   发布时间:2016-04-27 22:32:18.0
Android Studio下加入百度地图的使用(二)——定位服务

上一章(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/ 
版权声明:本文版权归杰瑞教育技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:JRedu技术交流
 
  相关解决方案