基于Fragment的百度地图框架的使用
博客: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设置全局变量,并且进行校验密钥:
package com.ztt.baidumap.ui; import android.app.Application;
import android.content.Context;
import android.util.Log;
import android.widget.Toast; import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
/**
* 自定义Application,进行key识别验证 (使用单例)
* @author Jiangqq
* @time 2014/03/15 10:14
*/
public class MyApplication extends Application {
public static MyApplication instance=null;
BMapManager mBMapManager = null;
public boolean m_bKeyRight = true;
public static final String strKey = "vUAGbPwLpolIqiwWisnQPeIE"; //百度地图官网申请的密钥
public static MyApplication getInstance(){
return instance;
}
@Override
public void onCreate() {
super.onCreate();
instance=this;
//在APP应用启动的时候,进行初始化验证
initEngineManager(this);
} /**
* 进行验证key
* @param pContext
*/
private void initEngineManager(Context pContext)
{
if (mBMapManager == null) {
mBMapManager = new BMapManager(pContext);
} if (!mBMapManager.init(strKey,new MyGeneralListener())) {
Toast.makeText(MyApplication.getInstance(),
"BMapManager 初始化错误!", Toast.LENGTH_LONG).show();
}
}
// 常用事件监听,用来处理通常的网络错误,授权验证错误等
static class MyGeneralListener implements MKGeneralListener { @Override
public void onGetNetworkState(int iError) {
if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
Toast.makeText(MyApplication.getInstance(), "您的网络出错啦!",
Toast.LENGTH_LONG).show();
}
else if (iError == MKEvent.ERROR_NETWORK_DATA) {
Toast.makeText(MyApplication.getInstance(), "输入正确的检索条件!",
Toast.LENGTH_LONG).show();
}else {
Log.d("zttjiangqq", "iError="+iError);
}
// ...
} @Override
public void onGetPermissionState(int iError) {
//非零值表示key验证未通过
if (iError != ) {
//授权Key错误:
Toast.makeText(MyApplication.getInstance(),
"请在 DemoApplication.java文件输入正确的授权Key,并检查您的网络连接是否正常!error: "+iError, Toast.LENGTH_LONG).show();
MyApplication.getInstance().m_bKeyRight = false;
}
else{
MyApplication.getInstance().m_bKeyRight = true;
Toast.makeText(MyApplication.getInstance(),
"key认证成功", Toast.LENGTH_LONG).show();
}
}
}
}
2:创建一个FragmentMapDemo.java,继承于FragmentActivity,使用newInstance()方法获取SupportMapFragment,进行显示地图:
package com.ztt.baidumap.ui; import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.Log; import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.SupportMapFragment;
import com.baidu.platform.comapi.basestruct.GeoPoint; public class FragmentMapDemo extends FragmentActivity {
SupportMapFragment map;
@Override
public void onCreate(Bundle arg0) {
/**
* 使用地图sdk前需先初始化BMapManager.
* BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建,
* 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁
*/
MyApplication app = (MyApplication)this.getApplication();
if (app.mBMapManager == null) {
app.mBMapManager = new BMapManager(getApplicationContext());
/**
* 如果BMapManager没有初始化则初始化BMapManager
*/
app.mBMapManager.init(MyApplication.strKey,new MyApplication.MyGeneralListener());
}
Log.d("zttjiangqq", "onCreate");
setContentView(R.layout.activity_fragment);
map = SupportMapFragment.newInstance();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft= manager.beginTransaction();
ft.add(R.id.map, map, "map_fragment");
ft.commit();
} @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.d("zttjiangqq", "onRestoreInstanceState");
} @Override
protected void onRestart() {
super.onRestart();
Log.d("zttjiangqq", "onRestart");
} @Override
public void onStart() {
super.onStart();
Log.d("zttjiangqq", "onStart");
} @Override
public void onResume() {
super.onResume();
Log.d("zttjiangqq", "onResume");
// 得到MapView的控制权,可以用它控制和驱动平移和缩放
MapController controller = map.getMapView().getController();
// 用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6) 并且设置设置地图中心点 (这边使用天安门)
controller.setCenter(new GeoPoint((int)(39.945 * 1E6), (int)(116.404 * 1E6)));
// 设置地图zoom级别
controller.setZoom();
} @Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.d("zttjiangqq", "onSaveInstanceState");
} @Override
public void onPause() {
super.onPause();
Log.d("zttjiangqq", "onPause");
} @Override
public void onStop() {
super.onStop();
Log.d("zttjiangqq", "onStop");
} @Override
public void onDestroy() {
super.onDestroy();
Log.d("zttjiangqq", "onDestory");
} @Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.d("zttjiangqq", "onConfigurationChanged");
}
}
3:布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <FrameLayout
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </LinearLayout>
(三)注意一定要添加配置权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCES_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<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.ACCESS_GPS" />
<!-- 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 android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- 来电消音 -->
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
基于Fragment的百度地图框架的使用的更多相关文章
- 基于Android的百度地图实现输入地址返回经纬度信息
1 解决方案一 此处解决办法参照自网友文章,对于输入的地址信息要求:城市名+具体地址名. 如果输入的地址信息只有具体地址名,而没有城市名,可能解析不出经纬度信息.还有就是解析出的经纬度再反向解析显示再 ...
- Echarts3.0 引入百度地图(转载)
转载来源: https://blog.csdn.net/yc_1993/article/details/52431989 Echarts3.0引入百度地图 update: 由于目前echarts3.8 ...
- 【百度地图开发之二】基于Fragment的地图框架的使用
写在前面的话: [百度地图开发之二]基于Fragment的地图框架的使用(博客地址:http://blog.csdn.net/developer_jiangqq),转载请注明. Author:hmji ...
- 在Fragment中实现百度地图,定位到当前位置(基于SDKv2.1.0)
使用最新版本的百度地图需要注意的几个地方: 1.libs文件夹下要有android-support-v4.jar.baidumapapi_v2_1_0.jar.locSDK_3.1.jar三个jar包 ...
- 记录开发基于百度地图API实现在地图上绘制轨迹并拾取轨迹对应经纬度的工具说明
前言: 最近一直在做数据可视化方面的工作,其中平面可视化没什么难度,毕竟已经有很多成熟的可供使用的框架,比如百度的echart.js,highcharts.js等.还有就是3D可视化了,整体来说难度也 ...
- html5:地理信息 LBS基于地理的服务和百度地图API的使用
地理位置请求 单次定位请求getCurrentPosition(请求成功函数,请求失败函数,数据收集方式) 多次定位请求watchPosition(请求成功函数,请求失败函数,数据收集方式) 关闭更新 ...
- 基于MFC与第三方类CWebPage的百度地图API开发范例
在进行百度地图API开发之前你需要到http://developer.baidu.com/map申请密匙 密匙申请之后就可以进行百度地图API的开发了. 下面我们以在visual c++6.0里进行地 ...
- 基于百度地图api + AngularJS 的入门地图
转载请注明地址:http://www.cnblogs.com/enzozo/p/4368081.html 简介: 此入门地图为简易的“广州大学城”公交寻路地图,采用很少量的AngularJS进行inp ...
- 最新百度地图支持Fragment(注意事项)(转)
原文: 最新百度地图支持Fragment(注意事项) 开篇:老的百度地图通常都要继承MapActivity,这样不利于代码的可扩展性,再加上Fragment的流行,老的百度地图已经远远不能满足的大 ...
随机推荐
- Code[VS] 1230 题解
1230 元素查找 题目描述 Description 给出n个正整数,然后有m个询问,每个询问一个整数,询问该整数是否在n个正整数中出现过. 输入描述 Input Description 第一行两个整 ...
- Web服务网站故障分析常用的命令
1.查看TCP连接状态netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn netstat -n | awk ‘/^tcp/ {++S[$NF]}; ...
- Android 网络状态检测
package com.example.administrator.yunstore.net; import android.app.AlertDialog; import android.conte ...
- JSP内置对象及常用方法
jsp九大内置对象及四个作用域: 何为作用域 先让我们看看效果: 大概流程是这样的,我们访问index.jsp的时候,分别对pageContext, request, session,applicat ...
- IT人生知识分享:概率与运气
前言: 最近的人生多了些体验,也读了些许书,感觉还是有些知识是可以分享的. 今天难得周六,特意开电脑了,花几个小时写写,和大伙分享分享点知识. 以下内容,更多的需要读者思考,所以结论不会写太清晰,但一 ...
- 剑指Offer面试题:6.用两个栈实现队列
一.题目:用两个栈实现队列 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 原文是使用 ...
- Nodejs之MEAN栈开发(三)---- 使用Mongoose创建模型及API
继续开扒我们的MEAN栈开发之路,前面两节我们学习了Express.Jade引擎并创建了几个静态页面,最后通过Heroku部署了应用. Nodejs之MEAN栈开发(一)---- 路由与控制器 Nod ...
- 【Java并发编程实战】-----“J.U.C”:ReentrantLock之三unlock方法分析
前篇博客LZ已经分析了ReentrantLock的lock()实现过程,我们了解到lock实现机制有公平锁和非公平锁,两者的主要区别在于公平锁要按照CLH队列等待获取锁,而非公平锁无视CLH队列直接获 ...
- 用.NET MVC实现长轮询,与jQuery.AJAX即时双向通信
两周前用长轮询做了一个Chat,并移植到了Azure,还写了篇博客http://www.cnblogs.com/indream/p/3187540.html,让大家帮忙测试. 首先感谢300位注册用户 ...
- IoC在ASP.NET Web API中的应用
控制反转(Inversion of Control,IoC),简单地说,就是应用本身不负责依赖对象的创建和维护,而交给一个外部容器来负责.这样控制权就由应用转移到了外部IoC容器,控制权就实现了所谓的 ...