博客:http://blog.csdn.net/developer_jiangqq

(一)基本介绍(Fragment和SupportMapFragment):

Fragment的使用现在安卓APP开发中用的比较多了,Fragment名称为碎片和Activity有着相似的生命管理周期,基本作用可以进行开发兼容手机和平板的app,较少兼容分辨率版本的工作量,提高工作效率。其中Fragment还是可以包含控制代码的视图模块,可以非常方便的进行组合。使用起来很方便。具体有个Fragment的介绍和使用请点击查看(官网Fragment的介绍和基本使用),这边就不多讲了。下面我们来看下百度地图API给我们提供的地图框架SupportMapFragment。SupportMapFragment是继承于Fragment因此具备Fragment的完成的生命周期,该框架主要用来管理地图生命周期,主要有下面两个方法1:getMapView():获取MapView引用,要在onCreateView函数调用之后进行使用.2:newInstance();返回获取SupportMapFragment对象实例。

(二)使用方法:

使用方法和我们平时用Fragment的时候差不多,首先获取SupportMapFragment实例,然后把该Fragment添加到指定View视图图.commit一下即可.

(三)代码演示,注释基本已经写了挺详细了,直接看就OK了

1.自定义MyApplication.java设置全局变量,并且进行校验密钥:

  1. package com.ztt.baidumap.ui;
  2.  
  3. import android.app.Application;
  4. import android.content.Context;
  5. import android.util.Log;
  6. import android.widget.Toast;
  7.  
  8. import com.baidu.mapapi.BMapManager;
  9. import com.baidu.mapapi.MKGeneralListener;
  10. import com.baidu.mapapi.map.MKEvent;
  11. /**
  12. * 自定义Application,进行key识别验证 (使用单例)
  13. * @author Jiangqq
  14. * @time 2014/03/15 10:14
  15. */
  16. public class MyApplication extends Application {
  17. public static MyApplication instance=null;
  18. BMapManager mBMapManager = null;
  19. public boolean m_bKeyRight = true;
  20. public static final String strKey = "vUAGbPwLpolIqiwWisnQPeIE"; //百度地图官网申请的密钥
  21. public static MyApplication getInstance(){
  22. return instance;
  23. }
  24. @Override
  25. public void onCreate() {
  26. super.onCreate();
  27. instance=this;
  28. //在APP应用启动的时候,进行初始化验证
  29. initEngineManager(this);
  30. }
  31.  
  32. /**
  33. * 进行验证key
  34. * @param pContext
  35. */
  36. private void initEngineManager(Context pContext)
  37. {
  38. if (mBMapManager == null) {
  39. mBMapManager = new BMapManager(pContext);
  40. }
  41.  
  42. if (!mBMapManager.init(strKey,new MyGeneralListener())) {
  43. Toast.makeText(MyApplication.getInstance(),
  44. "BMapManager 初始化错误!", Toast.LENGTH_LONG).show();
  45. }
  46. }
  47. // 常用事件监听,用来处理通常的网络错误,授权验证错误等
  48. static class MyGeneralListener implements MKGeneralListener {
  49.  
  50. @Override
  51. public void onGetNetworkState(int iError) {
  52. if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
  53. Toast.makeText(MyApplication.getInstance(), "您的网络出错啦!",
  54. Toast.LENGTH_LONG).show();
  55. }
  56. else if (iError == MKEvent.ERROR_NETWORK_DATA) {
  57. Toast.makeText(MyApplication.getInstance(), "输入正确的检索条件!",
  58. Toast.LENGTH_LONG).show();
  59. }else {
  60. Log.d("zttjiangqq", "iError="+iError);
  61. }
  62. // ...
  63. }
  64.  
  65. @Override
  66. public void onGetPermissionState(int iError) {
  67. //非零值表示key验证未通过
  68. if (iError != ) {
  69. //授权Key错误:
  70. Toast.makeText(MyApplication.getInstance(),
  71. "请在 DemoApplication.java文件输入正确的授权Key,并检查您的网络连接是否正常!error: "+iError, Toast.LENGTH_LONG).show();
  72. MyApplication.getInstance().m_bKeyRight = false;
  73. }
  74. else{
  75. MyApplication.getInstance().m_bKeyRight = true;
  76. Toast.makeText(MyApplication.getInstance(),
  77. "key认证成功", Toast.LENGTH_LONG).show();
  78. }
  79. }
  80. }
  81. }

   2:创建一个FragmentMapDemo.java,继承于FragmentActivity,使用newInstance()方法获取SupportMapFragment,进行显示地图:

  1. package com.ztt.baidumap.ui;
  2.  
  3. import android.content.res.Configuration;
  4. import android.os.Bundle;
  5. import android.support.v4.app.FragmentActivity;
  6. import android.support.v4.app.FragmentManager;
  7. import android.support.v4.app.FragmentTransaction;
  8. import android.util.Log;
  9.  
  10. import com.baidu.mapapi.BMapManager;
  11. import com.baidu.mapapi.map.MapController;
  12. import com.baidu.mapapi.map.SupportMapFragment;
  13. import com.baidu.platform.comapi.basestruct.GeoPoint;
  14.  
  15. public class FragmentMapDemo extends FragmentActivity {
  16. SupportMapFragment map;
  17. @Override
  18. public void onCreate(Bundle arg0) {
  19. /**
  20. * 使用地图sdk前需先初始化BMapManager.
  21. * BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建,
  22. * 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁
  23. */
  24. MyApplication app = (MyApplication)this.getApplication();
  25. if (app.mBMapManager == null) {
  26. app.mBMapManager = new BMapManager(getApplicationContext());
  27. /**
  28. * 如果BMapManager没有初始化则初始化BMapManager
  29. */
  30. app.mBMapManager.init(MyApplication.strKey,new MyApplication.MyGeneralListener());
  31. }
  32. Log.d("zttjiangqq", "onCreate");
  33. setContentView(R.layout.activity_fragment);
  34. map = SupportMapFragment.newInstance();
  35. FragmentManager manager = getSupportFragmentManager();
  36. FragmentTransaction ft= manager.beginTransaction();
  37. ft.add(R.id.map, map, "map_fragment");
  38. ft.commit();
  39. }
  40.  
  41. @Override
  42. protected void onRestoreInstanceState(Bundle savedInstanceState) {
  43. super.onRestoreInstanceState(savedInstanceState);
  44. Log.d("zttjiangqq", "onRestoreInstanceState");
  45. }
  46.  
  47. @Override
  48. protected void onRestart() {
  49. super.onRestart();
  50. Log.d("zttjiangqq", "onRestart");
  51. }
  52.  
  53. @Override
  54. public void onStart() {
  55. super.onStart();
  56. Log.d("zttjiangqq", "onStart");
  57. }
  58.  
  59. @Override
  60. public void onResume() {
  61. super.onResume();
  62. Log.d("zttjiangqq", "onResume");
  63. // 得到MapView的控制权,可以用它控制和驱动平移和缩放
  64. MapController controller = map.getMapView().getController();
  65. // 用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6) 并且设置设置地图中心点 (这边使用天安门)
  66. controller.setCenter(new GeoPoint((int)(39.945 * 1E6), (int)(116.404 * 1E6)));
  67. // 设置地图zoom级别
  68. controller.setZoom();
  69. }
  70.  
  71. @Override
  72. public void onSaveInstanceState(Bundle outState) {
  73. super.onSaveInstanceState(outState);
  74. Log.d("zttjiangqq", "onSaveInstanceState");
  75. }
  76.  
  77. @Override
  78. public void onPause() {
  79. super.onPause();
  80. Log.d("zttjiangqq", "onPause");
  81. }
  82.  
  83. @Override
  84. public void onStop() {
  85. super.onStop();
  86. Log.d("zttjiangqq", "onStop");
  87. }
  88.  
  89. @Override
  90. public void onDestroy() {
  91. super.onDestroy();
  92. Log.d("zttjiangqq", "onDestory");
  93. }
  94.  
  95. @Override
  96. public void onConfigurationChanged(Configuration newConfig) {
  97. super.onConfigurationChanged(newConfig);
  98. Log.d("zttjiangqq", "onConfigurationChanged");
  99. }
  100. }

  3:布局文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6.  
  7. <FrameLayout
  8. android:id="@+id/map"
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent" />
  11.  
  12. </LinearLayout>

  (三)注意一定要添加配置权限

  1. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
  2. <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" />
  3. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  4. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  5. <uses-permission android:name="android.permission.INTERNET" />
  6. <uses-permission android:name="android.permission.ACCES_MOCK_LOCATION" />
  7. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  8. <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
  9. <uses-permission android:name="android.permission.WAKE_LOCK" />
  10. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  11. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  12. <uses-permission android:name="android.permission.ACCESS_GPS" />
  13. <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->
  14. <uses-permission android:name="android.permission.GET_TASKS" />
  15. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  16. <uses-permission android:name="android.permission.BROADCAST_STICKY" />
  17. <uses-permission android:name="android.permission.WRITE_SETTINGS" />
  18. <!-- 来电消音 -->
  19. <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
  20. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  21. <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
  22. <uses-permission android:name="android.permission.RECORD_AUDIO" />

基于Fragment的百度地图框架的使用的更多相关文章

  1. 基于Android的百度地图实现输入地址返回经纬度信息

    1 解决方案一 此处解决办法参照自网友文章,对于输入的地址信息要求:城市名+具体地址名. 如果输入的地址信息只有具体地址名,而没有城市名,可能解析不出经纬度信息.还有就是解析出的经纬度再反向解析显示再 ...

  2. Echarts3.0 引入百度地图(转载)

    转载来源: https://blog.csdn.net/yc_1993/article/details/52431989 Echarts3.0引入百度地图 update: 由于目前echarts3.8 ...

  3. 【百度地图开发之二】基于Fragment的地图框架的使用

    写在前面的话: [百度地图开发之二]基于Fragment的地图框架的使用(博客地址:http://blog.csdn.net/developer_jiangqq),转载请注明. Author:hmji ...

  4. 在Fragment中实现百度地图,定位到当前位置(基于SDKv2.1.0)

    使用最新版本的百度地图需要注意的几个地方: 1.libs文件夹下要有android-support-v4.jar.baidumapapi_v2_1_0.jar.locSDK_3.1.jar三个jar包 ...

  5. 记录开发基于百度地图API实现在地图上绘制轨迹并拾取轨迹对应经纬度的工具说明

    前言: 最近一直在做数据可视化方面的工作,其中平面可视化没什么难度,毕竟已经有很多成熟的可供使用的框架,比如百度的echart.js,highcharts.js等.还有就是3D可视化了,整体来说难度也 ...

  6. html5:地理信息 LBS基于地理的服务和百度地图API的使用

    地理位置请求 单次定位请求getCurrentPosition(请求成功函数,请求失败函数,数据收集方式) 多次定位请求watchPosition(请求成功函数,请求失败函数,数据收集方式) 关闭更新 ...

  7. 基于MFC与第三方类CWebPage的百度地图API开发范例

    在进行百度地图API开发之前你需要到http://developer.baidu.com/map申请密匙 密匙申请之后就可以进行百度地图API的开发了. 下面我们以在visual c++6.0里进行地 ...

  8. 基于百度地图api + AngularJS 的入门地图

    转载请注明地址:http://www.cnblogs.com/enzozo/p/4368081.html 简介: 此入门地图为简易的“广州大学城”公交寻路地图,采用很少量的AngularJS进行inp ...

  9. 最新百度地图支持Fragment(注意事项)(转)

    原文: 最新百度地图支持Fragment(注意事项)   开篇:老的百度地图通常都要继承MapActivity,这样不利于代码的可扩展性,再加上Fragment的流行,老的百度地图已经远远不能满足的大 ...

随机推荐

  1. Android -- PopupWindow(其中嵌套ListView 可以被点击)

    1. 效果图

  2. 使用post方式提交表单如何获取图片数据及其他文本参数[NodeJS]

    当POST方式提交包含图片的表单时,如上传图片时,需要在<form>字段需要添加参数enctype="multipart/form-data",表明以二进制方式传输数据 ...

  3. css屏蔽元素的鼠标事件pointer-events

    // 屏蔽点击 $('body').css('pointer-events', 'none'); //恢复默认 $('body').css('pointer-events', 'auto');   用 ...

  4. IntelliJ添加Emacs编辑器

    Intellij只支持emacs as a external tool: https://www.jetbrains.com/help/idea/2016.2/tutorial-using-emacs ...

  5. windows下C++高精度计时

    写代码时,经常会计算某一段代码的运行时间,以下提供一个微秒级别的类供参考 class CTimeCost { public: CTimeCost(const string &str) : m_ ...

  6. IDT HOOK思路整理

    IDT(中断描述符表)分为IRQ(真正的硬件中断)和软件中断(又叫异常). HOOK的思路为,替换键盘中断处理的函数地址为自己的函数地址.这样在键盘驱动和过滤驱动之前就可以截获键盘输入. 思路确定之后 ...

  7. radio相关

    radio 按钮组, name=”sex”. <input type="radio" name="sex" value="Male"& ...

  8. ios使用CocoaHTTPServer实现文件共享

    CocoaHTTPServer下载地址:https://github.com/robbiehanson/CocoaHTTPServer 实现效果:在电脑端输入192.168.0.100:8080,出现 ...

  9. 你写的Try...Catch真的有必要么?

    很多人喜欢用Try...Catch把每一个方法都包裹起来,可是真的有必要么? 为什么要这样做?我估计是大家被BUG吓怕了,生怕生产环境出现各种莫名其妙的错误,比如最经典的NullReferenceEx ...

  10. 借助 Lucene.Net 构建站内搜索引擎(下)

    前言:上一篇我们学习了Lucene.Net的基本概念.分词以及实现了一个最简单的搜索引擎,这一篇我们开始开发一个初具规模的站内搜索项目,通过开发站内搜索模块,我们可以方便地在项目中集成站内搜索功能.本 ...