zoukankan      html  css  js  c++  java
  • 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技术交流
     
  • 相关阅读:
    git提交步骤
    封装ajax方法
    review的一个收获popstate,addEventListener:false ,split,jquery cache
    y=y||'world'与y=y?y:'world'
    toString()和toLocaleString()有什么区别
    0,null,undefined,[],{},'',false之间的关系
    小白封装小程序的公共方法时一些笔记
    小程序的一个tab切换
    MVC源码分析
    MVC源码解析
  • 原文地址:https://www.cnblogs.com/jerehedu/p/4891658.html
Copyright © 2011-2022 走看看