zoukankan      html  css  js  c++  java
  • android 百度地图定位开发2

    先下载了示例代码

    进行配置(可查看开发 指南 Hello BaiDuMap)

    第一步:创建并配置工程(具体方法参见工程配置部分的介绍);

    第二步:在AndroidManifest中添加开发密钥、所需权限等信息;

    (1)在application中添加开发密钥

    <application>  
        <meta-data  
            android:name="com.baidu.lbsapi.API_KEY"  
            android:value="开发者 key" />  
    </application>

    2)添加所需权限

    复制代码
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <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.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    复制代码
     

    第三步,在布局xml文件中添加地图控件;

    <com.baidu.mapapi.map.MapView  
        android:id="@+id/bmapView"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:clickable="true" />
     

    第四步,在应用程序创建时初始化 SDK引用的Context 全局变量:

    复制代码
    public class MainActivity extends Activity {  
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);   
            //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
            //注意该方法要再setContentView方法之前实现  
            SDKInitializer.initialize(getApplicationContext());  
            setContentView(R.layout.activity_main);  
        }  
    }
    复制代码

    注意:在SDK各功能组件使用之前都需要调用

    SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中

    第五步,创建地图Activity,管理地图生命周期;

    复制代码
    public class MainActivity extends Activity {  
        MapView mMapView = null;  
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);   
            //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
            //注意该方法要再setContentView方法之前实现  
            SDKInitializer.initialize(getApplicationContext());  
            setContentView(R.layout.activity_main);  
            //获取地图控件引用  
            mMapView = (MapView) findViewById(R.id.bmapView);  
        }  
        @Override  
        protected void onDestroy() {  
            super.onDestroy();  
            //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
            mMapView.onDestroy();  
        }  
        @Override  
        protected void onResume() {  
            super.onResume();  
            //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
            mMapView.onResume();  
            }  
        @Override  
        protected void onPause() {  
            super.onPause();  
            //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
            mMapView.onPause();  
            }  
        }
    复制代码

     下面是我做的项目:

    activity_main.xml

    复制代码
    <RelativeLayout 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"
        tools:context=".MainActivity" >
    
        <com.baidu.mapapi.map.MapView  
        android:id="@+id/bmapView"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:clickable="true" />
    
    </RelativeLayout>
    复制代码

    配置权限

    AndroidManifest.xml

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.bawei.baidumap"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />
        
    <uses-permission android:name="com.android.launcher.permission.READ_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" />
        <!-- 用于读取手机当前的状态 -->
        <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" />
        
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            
            <meta-data  
            android:name="com.baidu.lbsapi.API_KEY"  
            android:value="Wuz93fsZYfrtdT4scR5LZ4Zwc8OCco6V" />
            
            <activity
                android:name="com.bawei.baidumap.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
              <service
                android:name="com.baidu.location.f"
                android:enabled="true"
                android:process=":remote" >
            </service>
        </application>
    
    </manifest>
    复制代码

    注释:service 为百度定位时用到的

     导包  在示例代码里自己找

    MainActivity.java     可参考示例代码BaiduMapsApiDemosrcaidumapsdkdemoLocationDemo.java

    复制代码
    package com.bawei.baidumap;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.widget.Toast;
    
    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.MapStatus;
    import com.baidu.mapapi.map.MapStatusUpdateFactory;
    import com.baidu.mapapi.map.MapView;
    import com.baidu.mapapi.map.MarkerOptions;
    import com.baidu.mapapi.map.MyLocationData;
    import com.baidu.mapapi.map.OverlayOptions;
    import com.baidu.mapapi.model.LatLng;
    
    public class MainActivity extends Activity {
    
        private MapView mMapView;
        private BaiduMap mBaiduMap;
        private LocationClient mLocClient;
        public MyLocationListenner myListener = new MyLocationListenner();
          boolean isFirstLoc = true; // 是否首次定位
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            
            //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
            //注意该方法要再setContentView方法之前实现  
             SDKInitializer.initialize(getApplicationContext());
             
            setContentView(R.layout.activity_main);
             // 地图初始化
            mMapView = (MapView) findViewById(R.id.bmapView);  
            mBaiduMap = mMapView.getMap(); 
        /*    // 实时交通图
            //开启交通图   
            mBaiduMap.setTrafficEnabled(true);
            
            
            //百度城市热力图
            mMapView = (MapView) findViewById(R.id.bmapView);  
            mBaiduMap = mMapView.getMap();  
            //开启交通图   
            mBaiduMap.setBaiduHeatMapEnabled(true);
            
            
            //地图标注
            //定义Maker坐标点  
            LatLng point = new LatLng(39.963175, 116.400244);  
            //构建Marker图标  
            BitmapDescriptor bitmap = BitmapDescriptorFactory  
                .fromResource(R.drawable.icon_marka);  
            //构建MarkerOption,用于在地图上添加Marker  
            OverlayOptions option1 = new MarkerOptions()  
                .position(point)  
                .icon(bitmap);  
            //在地图上添加Marker,并显示  
            mBaiduMap.addOverlay(option1); */
             
            /*
            *
            *百度定位
            *
            *
            */
            
            
             // 开启定位图层
            mBaiduMap.setMyLocationEnabled(true);
            // 定位初始化
            mLocClient = new LocationClient(this);
            //注册定位的监听
            mLocClient.registerLocationListener(myListener);
            //
            LocationClientOption option = new LocationClientOption();
            option.setOpenGps(true); // 打开gps
            option.setCoorType("bd09ll"); // 设置坐标类型
            option.setPriority(LocationClientOption.NetWorkFirst);//设置定位优先级 网络优先
            //判断是否需要定位当前地址
            option.setIsNeedAddress(true);
            //定位间隔时间
            option.setScanSpan(1000);
            //
            mLocClient.setLocOption(option);
             //开始定位
            mLocClient.start();
            
            
        }
        class  MyLocationListenner implements BDLocationListener{
    
            public void onReceiveLocation(BDLocation arg0) {
                // TODO Auto-generated method stub
                //吐司
                Toast.makeText(MainActivity.this, "经度"+arg0.getLongitude()+"纬度"+arg0.getLatitude()+"地址"+arg0.getAddrStr()+"街道"+arg0.getStreet()+"时间"+arg0.getTime(), 0).show();
                //定义Maker坐标点  
                LatLng point = new LatLng(arg0.getLatitude(),arg0.getLongitude());  
                //构建Marker图标  
                BitmapDescriptor bitmap = BitmapDescriptorFactory  
                    .fromResource(R.drawable.icon_marka);  
                //构建MarkerOption,用于在地图上添加Marker  
                OverlayOptions option2 = new MarkerOptions()  
                    .position(point)  
                    .icon(bitmap);  
                //在地图上添加Marker,并显示  
                mBaiduMap.addOverlay(option2);
            
                
                 // map view 销毁后不在处理新接收的位置
                if (arg0 == null || mMapView == null) {
                    return;
                }
                //画出定位的区域
                MyLocationData locData = new MyLocationData.Builder()
                        .accuracy(arg0.getRadius())
                                // 此处设置开发者获取到的方向信息,顺时针0-360
                          //方圆100米
                        .direction(100).latitude(arg0.getLatitude())
                        .longitude(arg0.getLongitude()).build();
                mBaiduMap.setMyLocationData(locData);
                if (isFirstLoc) {
                    //判断是否首次定位
                    isFirstLoc = false;
                     //定位当前所在位置
                    LatLng ll = new LatLng(arg0.getLatitude(),arg0.getLongitude());
                    MapStatus.Builder builder = new MapStatus.Builder();
                    //放大18倍
                    builder.target(ll).zoom(18.0f);
                    mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
                }
            }
            
    
         
        }
        
          @Override
            protected void onPause() {
               //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
                mMapView.onPause();
                super.onPause();
            }
    
            @Override
            protected void onResume() {
                 //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
                mMapView.onResume();
                super.onResume();
            }
    
            @Override
            protected void onDestroy() {
                // 退出时销毁定位
                mLocClient.stop();
                // 关闭定位图层
                mBaiduMap.setMyLocationEnabled(false);
              //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
                mMapView.onDestroy();
                mMapView = null;
                super.onDestroy();
            }
    }
    复制代码
  • 相关阅读:
    sql server 操作文件
    sql server T-sql查询执行顺序
    js 时间相关函数
    js页面 :函数名 is not defined
    C# 通过文件路径获取文件名
    WRAR下载及注册
    Java 中xml解析
    string 与 byte[] 互转时的注意事项
    Spring MVC表单标签
    java 中基本类型与字符串之间的互相转换
  • 原文地址:https://www.cnblogs.com/wbp0818/p/5421231.html
Copyright © 2011-2022 走看看