Android 百度地图 SDK v3.0.0 (四) 离线地图功能介绍
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37758097
一直认为地图应用支持离线地图非常重要啊。我等移动2G屌丝,流量不易。且用且珍惜。
对于官方开发指南对于离线地图的教程,提供了两种方案:
第一。手动导入,先将从官网下载的离线包解压,把vmp目录拷入SD卡根目录下的BaiduMapSDK目录内。
好吧,我表示不能接受,无视了。
第二,接口下载方法例如以下:mOffline.start(cityid);还比較靠谱,就是没具体介绍。
今天。我们主要对另外一种方式进行具体介绍,然后集成到我们的已经集成了定位方向传感器的地图中,假设你还不了解:Android百度地图 SDK v3.0.0 (三) 加入覆盖物Marker与InfoWindow的使用
最主要当然是,下载过后,仅仅须要定位的流量(甚至不用)就能非常好的使用咱们的地图拉~
1、百度地图离线相关API介绍
java.util.ArrayList<MKOLSearchRecord> getHotCityList() 返回热门城市列表
java.util.ArrayList<MKOLSearchRecord> getOfflineCityList() 返回支持离线地图城市列表
MKOLUpdateElement getUpdateInfo(int cityID) 返回指定城市ID离线地图更新信息
boolean init(MKOfflineMapListener listener) 初使化
boolean pause(int cityID) 暂停下载指定城市ID的离线地图
boolean remove(int cityID) 删除指定城市ID的离线地图
boolean start(int cityID) 启动下载指定城市ID的离线地图
2、离线地图城市信息的实体Bean
package com.zhy.zhy_baidu_ditu_demo00; public class OfflineMapCityBean
{
private String cityName;
private int cityCode;
/**
* 下载的进度
*/
private int progress; private Flag flag = Flag.NO_STATUS;
/**
* 下载的状态:无状态。暂停,正在下载
* @author zhy
*
*/
public enum Flag
{
NO_STATUS,PAUSE,DOWNLOADING
} public Flag getFlag()
{
return flag;
} public void setFlag(Flag flag)
{
this.flag = flag;
} public OfflineMapCityBean()
{
} public OfflineMapCityBean(String cityName, int cityCode, int progress)
{
this.cityName = cityName;
this.cityCode = cityCode;
this.progress = progress;
} public String getCityName()
{
return cityName;
} public void setCityName(String cityName)
{
this.cityName = cityName;
} public int getCityCode()
{
return cityCode;
} public void setCityCode(int cityCode)
{
this.cityCode = cityCode;
} public int getProgress()
{
return progress;
} public void setProgress(int progress)
{
this.progress = progress;
} }
包括了,城市名称:用于listview上的显示。城市id:用于查询下载情况,进度:更新listview下载时的显示,标志:用户开启或者取消下载时的标志。
3、离线地图的使用
/**
* 初始化离线地图
*/
private void initOfflineMap()
{
mOfflineMap = new MKOfflineMap();
// 设置监听
mOfflineMap.init(new MKOfflineMapListener()
{
@Override
public void onGetOfflineMapState(int type, int state)
{
switch (type)
{
case MKOfflineMap.TYPE_DOWNLOAD_UPDATE:
// 离线地图下载更新事件类型
MKOLUpdateElement update = mOfflineMap.getUpdateInfo(state);
Log.e(TAG, update.cityName + " ," + update.ratio);
for (OfflineMapCityBean bean : mDatas)
{
if (bean.getCityCode() == state)
{
bean.setProgress(update.ratio);
bean.setFlag(Flag.DOWNLOADING);
break;
}
}
mAdapter.notifyDataSetChanged();
Log.e(TAG, "TYPE_DOWNLOAD_UPDATE");
break;
case MKOfflineMap.TYPE_NEW_OFFLINE:
// 有新离线地图安装
Log.e(TAG, "TYPE_NEW_OFFLINE");
break;
case MKOfflineMap.TYPE_VER_UPDATE:
// 版本号更新提示
break;
} }
});
}
设置离线地图的下载监听接口。眼下我们仅仅关注type为MKOfflineMap.TYPE_DOWNLOAD_UPDATE , 此时传入的state为cityId, 然后我们通过mOfflineMap.getUpdateInfo(state);能够获得该城市的下载数据,接下来更新我们listview的数据集,最后刷新界面。
private void initData()
{ // 获得全部热门城市
ArrayList<MKOLSearchRecord> offlineCityList = mOfflineMap
.getHotCityList();
// 手动加入了西安
MKOLSearchRecord xian = new MKOLSearchRecord();
xian.cityID = 233;
xian.cityName = "西安市";
offlineCityList.add(xian);
// 获得全部已经下载的城市列表
ArrayList<MKOLUpdateElement> allUpdateInfo = mOfflineMap
.getAllUpdateInfo();
// 设置全部数据的状态
for (MKOLSearchRecord record : offlineCityList)
{
OfflineMapCityBean cityBean = new OfflineMapCityBean();
cityBean.setCityName(record.cityName);
cityBean.setCityCode(record.cityID); if (allUpdateInfo != null)//没有不论什么下载记录,返回null,为啥不返回空列表~~
{
for (MKOLUpdateElement ele : allUpdateInfo)
{
if (ele.cityID == record.cityID)
{
cityBean.setProgress(ele.ratio);
}
} }
mDatas.add(cityBean);
} }
进入Activity先通过mOfflineMap.getHotCityList();获得热门城市列表。只是热门里面居然没有西安,我手动添加了一个西安。(这里我是为了方便。有兴趣的能够列出全国支持的城市);接下来mOfflineMap.getAllUpdateInfo();获得已经下载城市的数据信息;然后即可交叉对照,设置数据源数据。
private void initListView()
{
mListView = (ListView) findViewById(R.id.id_offline_map_lv);
mAdapter = new MyOfflineCityBeanAdapter();
mListView.setAdapter(mAdapter); mListView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<? > parent, View view,
int position, long id)
{
int cityId = mDatas.get(position).getCityCode();
if (mCityCodes.contains(cityId))
{
removeTaskFromQueue(position, cityId);
} else
{
addToDownloadQueue(position, cityId);
} }
});
}
为listview的item设置点击事件,第一次点击时加入下载队列。第二次点击时取消下载。
/**
* 热门城市地图列表的Adapter
*
* @author zhy
*
*/
class MyOfflineCityBeanAdapter extends BaseAdapter
{ @Override
public boolean isEnabled(int position)
{
if (mDatas.get(position).getProgress() == 100)
{
return false;
}
return super.isEnabled(position);
} @Override
public int getCount()
{
return mDatas.size();
} @Override
public Object getItem(int position)
{
return mDatas.get(position);
} @Override
public long getItemId(int position)
{
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent)
{
OfflineMapCityBean bean = mDatas.get(position);
ViewHolder holder = null;
if (convertView == null)
{
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.offlinemap_item,
parent, false);
holder.cityName = (TextView) convertView
.findViewById(R.id.id_cityname);
holder.progress = (TextView) convertView
.findViewById(R.id.id_progress);
convertView.setTag(holder);
} else
{
holder = (ViewHolder) convertView.getTag();
} holder.cityName.setText(bean.getCityName());
int progress = bean.getProgress();
String progressMsg = "";
// 依据进度情况,设置显示
if (progress == 0)
{
progressMsg = "未下载";
} else if (progress == 100)
{
bean.setFlag(Flag.NO_STATUS);
progressMsg = "已下载";
} else
{
progressMsg = progress + "%";
}
// 依据当前状态,设置显示
switch (bean.getFlag())
{
case PAUSE:
progressMsg += "【等待下载】";
break;
case DOWNLOADING:
progressMsg += "【正在下载】";
break;
default:
break;
}
holder.progress.setText(progressMsg);
return convertView;
} private class ViewHolder
{
TextView cityName;
TextView progress; }
}
适配器的代码比較简单。主要就是getView中根本bean的数据设置显示。
@Override
public boolean onOptionsItemSelected(MenuItem item)
{ switch (item.getItemId())
{
case R.id.id_menu_map_offline:
Intent intent = new Intent(MainActivity.this,
OfflineMapActivity.class);
startActivity(intent);
break;
...
}
}
好了,关于百度地图,眼下就用到这么多~~假设后期有别的需求。还会继续更新~
百度地图相关博客视频版本号已经上线:Android中百度地图的使用期待您的支持。
博主部分视频已经上线,假设你不喜欢枯燥的文本,请猛戳(初录,期待您的支持):
百度地图相关博客视频版本号已经上线:Android中百度地图的使用期待您的支持。
博主部分视频已经上线。假设你不喜欢枯燥的文本,请猛戳(初录,期待您的支持):
版权声明:本文博客原创文章。博客,未经同意,不得转载。
Android 百度地图 SDK v3.0.0 (四) 离线地图功能介绍的更多相关文章
- Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...
- Android 百度地图 SDK v3.0.0 (三) 加入覆盖Marker与InfoWindow使用
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...
- Android 百度地图 SDK v3.0.0 (一)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37729091 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SD ...
- 《第一行代码》(三: Android 百度地图 SDK v3.0.0)
百度地图的SDK变化较大,第一行代码里的demo已经不能用了,一直以为是代码类错误,害我花了很多时间,可以参考这位博主的:http://blog.csdn.net/lmj623565791/artic ...
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37730469 在上一篇博客中,我们成功把地图导入了我们的项目.本篇我们准备为地图 ...
- Android百度地图SDK 导航初始化和地图初始化引起的冲突
如题,相同是百度地图SDK开发过程中遇到的一个问题.交代下背景: 开发了一款内嵌百度地图的应用,因此里面差点儿相同将眼下百度地图SDK开放的主要功能都用到了,定位,地图显示,覆盖物标示.POI搜索,行 ...
- Android 百度地图SDK 定位
引用locSDK_6.1.3.jar,切记添加相应的so文件. 1.定位初始化,需要使用getApplicationContext() mLocClient = new LocationClient( ...
- Android 百度地图API(01)_开发环境 HelloBaiduMap
转载于:http://blog.csdn.net/lmj623565791/article/details/37729091 转载于:http://blog.csdn.net/crazy1235/ar ...
随机推荐
- HQL和SQL的区别
1.hql与sql的区别 sql 面向数据库表查询 hql 面向对象查询 hql : from 后面跟的 类名+类对象 where 后 用 对象的属性做条件 sql: from 后面跟的是表名 ...
- stackedit
https://github.com/benweet/stackedit/ https://github.com/waltcow/blog/issues/4
- Spring+Netty+WebSocket实例
比较贴近生产,详见注释 一.pom.xml 具体太长,详见源码 </dependency> <dependency> <groupId>io.netty</g ...
- winscp ppk无需密码登录(失败)
http://blog.csdn.net/catoop/article/details/8284803 按上文将Linux下生成的密钥文件id_rsa通过puttygen生成对应的.ppk文件,用wi ...
- signed 与 unsigned 有符号和无符号数
unsigned int a = 0; unsigned int b = -1; // b 为 0xffffffff unsigned int c = a - 1; // c 为 0xffffffff
- 工具类与工具函数 —— NextPrime
求大于某数的下一个素数: static int NextPrime (int N) { if (N % 2 == 0) ++N; int i; for (; ; N += 2){ for (i = 3 ...
- Struts2之配置使用
重要声明:此次学习struts2使用的版本号为:struts-2.3.15.3.假设是用的其它版本号出现的问题能够联系我. 一. 1.首先就是打开myeclipse创建project名为:struts ...
- WPF入门(三)->几何图形之椭圆形(EllipseGeometry)
原文:WPF入门(三)->几何图形之椭圆形(EllipseGeometry) 我们可以使用EllipseGeometry 来绘制一个椭圆或者圆形的图形 EllipseGeometry类: 表示圆 ...
- 【codeforces 777C】 Alyona and Spreadsheet
[题目链接]:http://codeforces.com/contest/777/problem/C [题意] 给你n行m列的矩阵: 然后给你k个询问[l,r]; 问你在第l到第r行,是否存在一个列, ...
- svn创建版本库和删除版本库
作者:朱金灿 来源:http://blog.csdn.net/clever101 svn创建版本库的做法:使用cd命令进入版本仓库的根目录,我的是E:\Repository,然后运行命令: svnad ...