基于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的流行,老的百度地图已经远远不能满足的大 ...
随机推荐
- 【第二课】WEBIX 入门自学-获取WEBIX及相关资料
下载WEBIX组件库 http://webix.com/download/ WEBIX在线文档 http://docs.webix.com/ 离线的手册 下载
- 怎么取得dropdownlist选中的ID值
把数据库绑定在dropdownlist中,然后把选中的dropdownlist的项的ID值保存在另外的一个数据库中.怎么取得dropdownlist选中的ID值呢?? this.DropDownLis ...
- 使用maven搭建ssh框架
首先搭建sturts2框架,配置pom文件: <properties> <!-- 文件拷贝时的编码 --> <project.build.sourceEncoding&g ...
- CentOS 简单设置samba服务
1.安装 yum -y install samba 2.设置配置文件 1) 备份Samba的配置文件:cp /etc/samba/smb.conf /etc/samba/smb.conf.bak ...
- dell笔记本三个系统,ubuntu16.04更新,boot分区容量不足解决办法
本人自己dell物理机上安装windows 7 .centos 1704 和ubuntu1604 三个系统的,分区当时没有使用lVM,boot单独挂/dev/sda7 分区,只有200M,随着2次li ...
- indows server 2008 多用户远程桌面连接设置(验证有效
然后,在运行框中输入 gpedit.msc 之后,点击确定或者直接按键盘上的回车键 计算机配置-->管理模板-->Windows组件---->远程桌面服务--->远程桌面会话 ...
- java排序学习笔记
前面写了js的排序实现,总得玩玩java的哈. 同样,冒泡.选择.快速(这三个之前实现过也写过文章).堆排序,然后做比较. 主要遇到的难点: - -||想轻松点写个封装计时的逻辑,不想每调用一个排序就 ...
- php 用 http post方法传输数据
private function http_post($url,$post,$timeout){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL ...
- MySQL流程函数
#如果value是真,返回t:否则返回f if(value,t f) #如果value1不为空,返回value1,否则返回value2 ifnull(value1,value2) #如果value1是 ...
- centos 7.2 安装PHP7.1+apache2.4.23
安装准备: http://ftp.cuhk.edu.hk/pub/packages/apache.org//httpd/httpd-2.4.23.tar.gz 下载apache http://cn ...