关于百度地图的基础地图和定位功能

来源:互联网 发布:剑灵外形数据 编辑:程序博客网 时间:2024/04/29 05:04


在AndroidManifest.xml中写入密匙和权限:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.bwie.test"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="11"        android:targetSdkVersion="17" />        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >    </uses-permission>    <uses-permission android:name="android.permission.INTERNET" >    </uses-permission>    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />    <uses-permission android:name="android.permission.WAKE_LOCK" >    </uses-permission>    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->    <uses-permission android:name="android.permission.GET_TASKS" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >    </uses-permission>    <uses-permission android:name="android.permission.WRITE_SETTINGS" />    <!-- 这个权限用于进行网络定位--><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>    <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="填写密匙" />                <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>                <activity            android:name="com.bwie.test.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>            </application></manifest>
在两个Fragment上写入,进行切换:

显示基础地图:

package com.bwie.fragments;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.map.MapView;import com.bwie.test.R;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class BasemapFragment extends Fragment{private MapView mMapView =null;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {//注意该方法要再setContentView方法之前实现          SDKInitializer.initialize(getActivity().getApplicationContext()); View view=inflater.inflate(R.layout.base_map_fragment_item, null);//获取地图控件引用          mMapView = (MapView) view.findViewById(R.id.bmapView); return view;}@Overridepublic void onDestroy() {          super.onDestroy();          //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理          mMapView.onDestroy();      }      @Overridepublic void onResume() {          super.onResume();          //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理          mMapView.onResume();          }      @Overridepublic void onPause() {          super.onPause();          //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理          mMapView.onPause();      }}

再是定位地图:

package com.bwie.fragments;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.MyLocationConfiguration;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;import com.baidu.mapapi.model.LatLng;import com.bwie.test.R;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.RadioGroup;import android.widget.RadioGroup.OnCheckedChangeListener;public class LocationFragment extends Fragment {// 定位相关      LocationClient mLocClient;      public MyLocationListenner myListener = new MyLocationListenner();      private LocationMode mCurrentMode;      BitmapDescriptor mCurrentMarker;         MapView mMapView;      BaiduMap mBaiduMap;//定义 BaiduMap 地图对象的操作方法与接口            private boolean isFirstLoc=true;     private Button requestLocButton;      // UI相关      OnCheckedChangeListener radioButtonListener; @Overridepublic View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {//注意该方法要再setContentView方法之前实现            SDKInitializer.initialize(getActivity().getApplicationContext());  View view=inflater.inflate(R.layout.fra2_location, null);    /*requestLocButton = (Button) view.findViewById(R.id.button1);          //定位图层显示方式      NORMAL:普通态: 更新定位数据时不对地图做任何操作          mCurrentMode = LocationMode.NORMAL;          requestLocButton.setText("普通");          OnClickListener btnClickListener = new OnClickListener() {              public void onClick(View v) {                  switch (mCurrentMode) {                      case NORMAL:                          requestLocButton.setText("跟随");                          //FOLLOWING:跟随态,保持定位图标在地图中心                          mCurrentMode = LocationMode.FOLLOWING;                          //参数:MyLocationConfiguration.LocationMode locationMode 定位图层显示方式                          //参数:boolean enableDirection  是否允许显示方向信息                          //参数:BitmapDescriptor customMarker   用户自定义定位图标                          mBaiduMap                                  .setMyLocationConfigeration(new MyLocationConfiguration(                                          mCurrentMode, true, mCurrentMarker));                          break;                      case COMPASS:                          requestLocButton.setText("普通");                          mCurrentMode = LocationMode.NORMAL;                          mBaiduMap                                  .setMyLocationConfigeration(new MyLocationConfiguration(                                          mCurrentMode, true, mCurrentMarker));                          break;                      case FOLLOWING:                          requestLocButton.setText("罗盘");                          //COMPASS:罗盘态,显示定位方向圈,保持定位图标在地图中心                          mCurrentMode = LocationMode.COMPASS;                          mBaiduMap                                  .setMyLocationConfigeration(new MyLocationConfiguration(                                          mCurrentMode, true, mCurrentMarker));                          break;                      default:                          break;                  }              }          };          requestLocButton.setOnClickListener(btnClickListener);            RadioGroup group = (RadioGroup) view.findViewById(R.id.radioGroup);          radioButtonListener = new OnCheckedChangeListener() {              @Override              public void onCheckedChanged(RadioGroup group, int checkedId) {                  if (checkedId == R.id.defaulticon) {                      // 传入null则,恢复默认图标                      mCurrentMarker = null;                      mBaiduMap                              .setMyLocationConfigeration(new MyLocationConfiguration(                                      mCurrentMode, true, null));                  }                  if (checkedId == R.id.customicon) {                      // 修改为自定义marker                      mCurrentMarker = BitmapDescriptorFactory                              .fromResource(R.drawable.ic_launcher);                      mBaiduMap                              .setMyLocationConfigeration(new MyLocationConfiguration(                                      mCurrentMode, true, mCurrentMarker));                  }              }          };                  group.setOnCheckedChangeListener(radioButtonListener);*/    // 地图初始化         mMapView = (MapView) view.findViewById(R.id.bmapView);         mBaiduMap = mMapView.getMap();         mCurrentMode = LocationMode.NORMAL;mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));                     // 开启定位图层         mBaiduMap.setMyLocationEnabled(true);         // 定位初始化         mLocClient = new LocationClient(getActivity());         //注册定位监听函数         mLocClient.registerLocationListener(myListener);         //配置定位SDK各配置参数,比如定位模式、定位时间间隔、坐标系类型等         LocationClientOption option = new LocationClientOption();         option.setOpenGps(true);// 打开gps         option.setCoorType("bd09ll"); // 设置坐标类型         option.setScanSpan(1000);//设置扫描间隔,单位是毫秒 当<1000(1s)时,定时定位无效         mLocClient.setLocOption(option);//设置 LocationClientOption         mLocClient.start();//启动定位sdkreturn view;}/**      * 定位SDK监听函数      */      public class MyLocationListenner implements BDLocationListener {            @Override          public void onReceiveLocation(BDLocation location) {//BDLocaiton - 定位结果              // map view 销毁后不在处理新接收的位置              if (location == null || mMapView == null) {                  return;              }              //定位数据              MyLocationData locData = new MyLocationData.Builder()//MyLocationData.Builder定位数据建造器                      .accuracy(location.getRadius())//accuracy设置定位数据的精度信息,单位:米                              // 此处设置开发者获取到的方向信息,顺时针0-360                      .direction(100).latitude(location.getLatitude())//latitude 设置定位数据的纬度                      .longitude(location.getLongitude()).build();//longitude  设置定位数据的经度              mBaiduMap.setMyLocationData(locData);//设置定位数据, 只有先允许定位图层后设置数据才会生效,参见 setMyLocationEnabled(boolean)              if (isFirstLoc) {                  isFirstLoc = false;                  //LatLng  地理坐标基本数据结构                  LatLng ll = new LatLng(location.getLatitude(),                          location.getLongitude());                  //MapStatusUpdate  描述地图状态将要发生的变化                  MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);//newLatLng(LatLng latLng) 设置地图新中心点                  mBaiduMap.animateMapStatus(u);//以动画方式更新地图状态,动画耗时 300 ms              }          }            public void onReceivePoi(BDLocation poiLocation) {          }     }         @Override        public void onDestroy() {        // 退出时销毁定位          mLocClient.stop();          // 关闭定位图层  设置是否允许定位图层          mBaiduMap.setMyLocationEnabled(false);          mMapView.onDestroy();          mMapView = null;          super.onDestroy();        }        @Override      public void onResume() {            super.onResume();            //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理            mMapView.onResume();      }        @Override      public void onPause() {            super.onPause();            //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理            mMapView.onPause();        } }



在Activity中进行切换:

package com.bwie.test;import com.bwie.fragments.BasemapFragment;import com.bwie.fragments.LocationUserFragment;import android.os.Bundle;import android.app.Activity;import android.graphics.Color;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.LinearLayout;public class MainActivity extends FragmentActivity implements OnClickListener{private LinearLayout ll;private Button base;private Button location;private FragmentManager fm;private BasemapFragment basemap;private LocationUserFragment locationuser;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);fm=getSupportFragmentManager();init();}private void init() {//找对象ll=(LinearLayout)findViewById(R.id.ll);base=(Button)findViewById(R.id.bt_base);location=(Button)findViewById(R.id.bt_location);//实例化basemap=new BasemapFragment();locationuser=new LocationUserFragment();//创建事务FragmentTransaction trac=fm.beginTransaction();trac.add(R.id.ll, basemap);trac.add(R.id.ll, locationuser);trac.replace(R.id.ll, basemap);trac.commit();//按钮的背景色base.setBackgroundColor(Color.BLUE);location.setBackgroundColor(Color.GRAY);//按钮的监听base.setOnClickListener(this);location.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.bt_base:base.setBackgroundColor(Color.BLUE);location.setBackgroundColor(Color.GRAY); FragmentTransaction trac=fm.beginTransaction();trac.replace(R.id.ll, basemap);trac.commit();break;case R.id.bt_location:base.setBackgroundColor(Color.GRAY);location.setBackgroundColor(Color.BLUE); FragmentTransaction trac1=fm.beginTransaction();trac1.replace(R.id.ll, locationuser);trac1.commit();break;default:break;}}}


另外百度地图的jar包也一定要添加进去。



0 0
原创粉丝点击