当前位置: 代码迷 >> Android >> android 实现百度mapapp
  详细解决方案

android 实现百度mapapp

热度:88   发布时间:2016-04-28 00:46:05.0
android 实现百度地图app

以百度api为基础

复制

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

要定义的变量

private BaiduMap mBaiduMap;    private MapView mMapView;    private LocationClient mLocationClient;    private boolean isFirstIn = true;

初始化

mMapView= (MapView) findViewById(R.id.bmapView);        mBaiduMap = mMapView.getMap();

各部分实现的功能
1.

//在使用SDK各组件之前初始化context信息,传入ApplicationContext          //注意该方法要再setContentView方法之前实现          SDKInitializer.initialize(getApplicationContext());  

把地图的生命周期和activity的生命周期绑定起来

@Override    protected void onStart() {        super.onStart();        mBaiduMap.setMyLocationEnabled(true);        if(!mLocationClient.isStarted())        mLocationClient.start();    }    @Override    protected void onStop() {        // TODO Auto-generated method stub        super.onStop();    }    @Override    protected void onDestroy() {        // TODO Auto-generated method stub        super.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();          }  

实现option点击转换地图模式

@Override        public boolean onCreateOptionsMenu(Menu menu) {            // TODO Auto-generated method stub            menu.add(0, 1, 0, "普通地图");            menu.add(0, 2, 0, "卫星地图");            menu.add(0, 3, 0, "实时交通(off)");            return super.onCreateOptionsMenu(menu);                 }

设置option的点击事件

@Override        public boolean onOptionsItemSelected(MenuItem item) {            switch (item.getItemId()) {            case 1:                //普通地图                  mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);                  break;            case 2:                 //卫星地图                  mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);                break;            case 3:                             if(mBaiduMap.isTrafficEnabled()){                    mBaiduMap.setTrafficEnabled(false);                    item.setTitle("实时交通(off)");                }else{                    mBaiduMap.setTrafficEnabled(true);                    item.setTitle("实时交通(on)");                }                break;            }                       return super.onOptionsItemSelected(item);               }

在地图上添加标识物

//定义Maker坐标点          LatLng point = new LatLng(39.963175, 116.400244);          //构建Marker图标          BitmapDescriptor bitmap = BitmapDescriptorFactory              .fromResource(R.drawable.ic_launcher);          //构建MarkerOption,用于在地图上添加Marker          OverlayOptions option = new MarkerOptions()              .position(point)              .icon(bitmap);          //在地图上添加Marker,并显示          mBaiduMap.addOverlay(option);         

设置gps定位
要用到的类
LocationClient
BDLocationListener

(1)

MyLocationListener myLocationListener = new MyLocationListener();       mLocationClient = new LocationClient(getApplicationContext());     //声明LocationClient类        mLocationClient.registerLocationListener(myLocationListener);    //注册监听函数  

(2)利用LocationClientOption 设置定位的属性

LocationClientOption option = new LocationClientOption();        option.setLocationMode(LocationMode.Hight_Accuracy);//设置定位模式        option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02        option.setScanSpan(1000);//设置发起定位请求的间隔时间为5000ms        option.setIsNeedAddress(true);//返回的定位结果包含地址信息        option.setNeedDeviceDirect(true);//返回的定位结果包含手机机头的方向        mLocationClient.setLocOption(option);

(3)监听器的实现

    private class MyLocationListener implements BDLocationListener{            @Override            public void onReceiveLocation(BDLocation location) {                // TODO Auto-generated method stub                MyLocationData data = new MyLocationData.Builder()                //设置经纬度                .accuracy(location.getRadius())                .latitude(location.getLatitude())                .longitude(location.getLongitude())                .build();                mBaiduMap.setMyLocationData(data);            //判断第一次进入,定位到目前所在位置            if(isFirstIn){                LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());                MapStatusUpdate msu =MapStatusUpdateFactory.newLatLng(latLng);                mBaiduMap.animateMapStatus(msu);                Toast.makeText(getApplicationContext(), location.getAddrStr(),3000).show();                isFirstIn = false;            }                       }          }

所要加的权限

    <!-- 这个权限用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission><!-- 这个权限用于访问GPS定位--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission><!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><!-- 获取运营商信息,用于支持提供运营商信息相关的接口--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission><!-- 用于读取手机当前的状态--><uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission><!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><!-- 访问网络,网络定位需要上网--><uses-permission android:name="android.permission.INTERNET" /><!-- SD卡读取权限,用户写入离线定位数据--><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission><!--允许应用读取低级别的系统日志文件 --><uses-permission android:name="android.permission.READ_LOGS"></uses-permission>    <uses-permission android:name="android.permission.GET_ACCOUNTS" />    <uses-permission android:name="android.permission.USE_CREDENTIALS" />    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />    <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.CHANGE_WIFI_STATE" />    <uses-permission android:name="android.permission.ACCESS_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.BROADCAST_STICKY" />    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

所要在application声明的

 <meta-data            android:name="com.baidu.lbsapi.API_KEY"            android:value="OSzBVaOV08hT2o7yNBIq4NFS" />        <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">    </service>
  相关解决方案