随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

百度SDK中提供了离线下载功能,这样在有网络的时候可以把地图下载下来,那么以后在无网的时候就可以使用地图功能了,百度Demo代码如下:

OffLineActivity:

package com.home;import java.util.ArrayList;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.map.MKOLSearchRecord;
import com.baidu.mapapi.map.MKOLUpdateElement;
import com.baidu.mapapi.map.MKOfflineMap;
import com.baidu.mapapi.map.MKOfflineMapListener;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;public class OffLineActivity extends Activity implements MKOfflineMapListener {private MapView mMapView = null;private MKOfflineMap mOffline = null;private TextView cidView;private TextView stateView;private EditText cityNameView;private MapController mMapController = null;/*** 已下载的离线地图信息列表*/private ArrayList<MKOLUpdateElement> localMapList = null;private LocalMapAdapter lAdapter = null;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);DemoApplication app = (DemoApplication) this.getApplication();if (app.mBMapManager == null) {app.mBMapManager = new BMapManager(this);app.mBMapManager.init(DemoApplication.strKey,new DemoApplication.MyGeneralListener());}setContentView(R.layout.activity_offline);mMapView = new MapView(this);mMapController = mMapView.getController();mOffline = new MKOfflineMap();/*** 初始化离线地图模块,MapControler可从MapView.getController()获取*/mOffline.init(mMapController, this);initView();}private void initView() {cidView = (TextView) findViewById(R.id.cityid);cityNameView = (EditText) findViewById(R.id.city);stateView = (TextView) findViewById(R.id.state);ListView hotCityList = (ListView) findViewById(R.id.hotcitylist);ArrayList<String> hotCities = new ArrayList<String>();// 获取热门城市列表ArrayList<MKOLSearchRecord> records1 = mOffline.getHotCityList();if (records1 != null) {for (MKOLSearchRecord r : records1) {hotCities.add(r.cityName + "(" + r.cityID + ")" + "   --"+ this.formatDataSize(r.size));}}ListAdapter hAdapter = (ListAdapter) new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, hotCities);hotCityList.setAdapter(hAdapter);ListView allCityList = (ListView) findViewById(R.id.allcitylist);// 获取所有支持离线地图的城市ArrayList<String> allCities = new ArrayList<String>();ArrayList<MKOLSearchRecord> records2 = mOffline.getOfflineCityList();if (records1 != null) {for (MKOLSearchRecord r : records2) {allCities.add(r.cityName + "(" + r.cityID + ")" + "   --"+ this.formatDataSize(r.size));}}ListAdapter aAdapter = (ListAdapter) new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, allCities);allCityList.setAdapter(aAdapter);LinearLayout cl = (LinearLayout) findViewById(R.id.citylist_layout);LinearLayout lm = (LinearLayout) findViewById(R.id.localmap_layout);lm.setVisibility(View.GONE);cl.setVisibility(View.VISIBLE);// 获取已下过的离线地图信息localMapList = mOffline.getAllUpdateInfo();if (localMapList == null) {localMapList = new ArrayList<MKOLUpdateElement>();}ListView localMapListView = (ListView) findViewById(R.id.localmaplist);lAdapter = new LocalMapAdapter();localMapListView.setAdapter(lAdapter);}/*** 切换至城市列表* * @param view*/public void clickCityListButton(View view) {LinearLayout cl = (LinearLayout) findViewById(R.id.citylist_layout);LinearLayout lm = (LinearLayout) findViewById(R.id.localmap_layout);lm.setVisibility(View.GONE);cl.setVisibility(View.VISIBLE);}/*** 切换至下载管理列表* * @param view*/public void clickLocalMapListButton(View view) {LinearLayout cl = (LinearLayout) findViewById(R.id.citylist_layout);LinearLayout lm = (LinearLayout) findViewById(R.id.localmap_layout);lm.setVisibility(View.VISIBLE);cl.setVisibility(View.GONE);}/*** 搜索离线城市* * @param view*/public void search(View view) {ArrayList<MKOLSearchRecord> records = mOffline.searchCity(cityNameView.getText().toString());if (records == null || records.size() != 1)return;cidView.setText(String.valueOf(records.get(0).cityID));}/*** 开始下载* * @param view*/public void start(View view) {int cityid = Integer.parseInt(cidView.getText().toString());mOffline.start(cityid);clickLocalMapListButton(null);Toast.makeText(this, "开始下载离线地图. cityid: " + cityid, Toast.LENGTH_SHORT).show();}/*** 暂停下载* * @param view*/public void stop(View view) {int cityid = Integer.parseInt(cidView.getText().toString());mOffline.pause(cityid);Toast.makeText(this, "暂停下载离线地图. cityid: " + cityid, Toast.LENGTH_SHORT).show();}/*** 删除离线地图* * @param view*/public void remove(View view) {int cityid = Integer.parseInt(cidView.getText().toString());mOffline.remove(cityid);Toast.makeText(this, "删除离线地图. cityid: " + cityid, Toast.LENGTH_SHORT).show();}/*** 从SD卡导入离线地图安装包* * @param view*/public void importFromSDCard(View view) {int num = mOffline.scan();String msg = "";if (num == 0) {msg = "没有导入离线包,这可能是离线包放置位置不正确,或离线包已经导入过";} else {msg = String.format("成功导入 %d 个离线包,可以在下载管理查看", num);}Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();}/*** 更新状态显示*/public void updateView() {localMapList = mOffline.getAllUpdateInfo();if (localMapList == null) {localMapList = new ArrayList<MKOLUpdateElement>();}lAdapter.notifyDataSetChanged();}@Overrideprotected void onPause() {int cityid = Integer.parseInt(cidView.getText().toString());mOffline.pause(cityid);mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {mMapView.onResume();super.onResume();}public String formatDataSize(int size) {String ret = "";if (size < (1024 * 1024)) {ret = String.format("%dK", size / 1024);} else {ret = String.format("%.1fM", size / (1024 * 1024.0));}return ret;}@Overrideprotected void onDestroy() {/*** 退出时,销毁离线地图模块*/mOffline.destroy();mMapView.destroy();super.onDestroy();}@Overridepublic void onGetOfflineMapState(int type, int state) {switch (type) {case MKOfflineMap.TYPE_DOWNLOAD_UPDATE: {MKOLUpdateElement update = mOffline.getUpdateInfo(state);// 处理下载进度更新提示if (update != null) {stateView.setText(String.format("%s : %d%%", update.cityName,update.ratio));updateView();}}break;case MKOfflineMap.TYPE_NEW_OFFLINE:// 有新离线地图安装Log.d("OfflineDemo", String.format("add offlinemap num:%d", state));break;case MKOfflineMap.TYPE_VER_UPDATE:// 版本更新提示// MKOLUpdateElement e = mOffline.getUpdateInfo(state);break;}}/*** 离线地图管理列表适配器*/public class LocalMapAdapter extends BaseAdapter {@Overridepublic int getCount() {return localMapList.size();}@Overridepublic Object getItem(int index) {return localMapList.get(index);}@Overridepublic long getItemId(int index) {return index;}@Overridepublic View getView(int index, View view, ViewGroup arg2) {MKOLUpdateElement e = (MKOLUpdateElement) getItem(index);view = View.inflate(OffLineActivity.this,R.layout.offline_localmap_list, null);initViewItem(view, e);return view;}void initViewItem(View view, final MKOLUpdateElement e) {Button display = (Button) view.findViewById(R.id.display);Button remove = (Button) view.findViewById(R.id.remove);TextView title = (TextView) view.findViewById(R.id.title);TextView update = (TextView) view.findViewById(R.id.update);TextView ratio = (TextView) view.findViewById(R.id.ratio);ratio.setText(e.ratio + "%");title.setText(e.cityName);if (e.update) {update.setText("可更新");} else {update.setText("最新");}if (e.ratio != 100) {display.setEnabled(false);} else {display.setEnabled(true);}remove.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {mOffline.remove(e.cityID);updateView();}});display.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.putExtra("x", e.geoPt.getLongitudeE6());intent.putExtra("y", e.geoPt.getLatitudeE6());intent.setClass(OffLineActivity.this,BaseMapDemoActivity.class);startActivity(intent);}});}}}

BaseMapDemoActivity:

package com.home;import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.widget.Toast;import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.map.MKMapViewListener;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapView;
import com.baidu.platform.comapi.basestruct.GeoPoint;/*** 演示MapView的基本用法*/
public class BaseMapDemoActivity extends Activity {final static String TAG = "MainActivity";/*** MapView 是地图主控件*/private MapView mMapView = null;/*** 用MapController完成地图控制*/private MapController mMapController = null;/*** MKMapViewListener 用于处理地图事件回调*/MKMapViewListener mMapListener = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/*** 使用地图sdk前需先初始化BMapManager. BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建,* 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁*/DemoApplication app = (DemoApplication) this.getApplication();if (app.mBMapManager == null) {app.mBMapManager = new BMapManager(this);/*** 如果BMapManager没有初始化则初始化BMapManager*/app.mBMapManager.init(DemoApplication.strKey,new DemoApplication.MyGeneralListener());}/*** 由于MapView在setContentView()中初始化,所以它需要在BMapManager初始化之后*/setContentView(R.layout.activity_main);mMapView = (MapView) findViewById(R.id.bmapView);/*** 获取地图控制器*/mMapController = mMapView.getController();/*** 设置地图是否响应点击事件 .*/mMapController.enableClick(true);/*** 设置地图缩放级别*/mMapController.setZoom(12);/*** 将地图移动至指定点* 使用百度经纬度坐标,可以通过http://api.map.baidu.com/lbsapi/getpoint/index* .html查询地理坐标 如果需要在百度地图上显示使用其他坐标系统的位置,请发邮件至mapapi@baidu.com申请坐标转换接口*/GeoPoint p;double cLat = 39.945;double cLon = 116.404;Intent intent = getIntent();if (intent.hasExtra("x") && intent.hasExtra("y")) {// 当用intent参数时,设置中心点为指定点Bundle b = intent.getExtras();p = new GeoPoint(b.getInt("y"), b.getInt("x"));} else {// 设置中心点为天安门p = new GeoPoint((int) (cLat * 1E6), (int) (cLon * 1E6));}mMapController.setCenter(p);/*** MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()*/mMapListener = new MKMapViewListener() {@Overridepublic void onMapMoveFinish() {/*** 在此处理地图移动完成回调 缩放,平移等操作完成后,此回调被触发*/}@Overridepublic void onClickMapPoi(MapPoi mapPoiInfo) {/*** 在此处理底图poi点击事件 显示底图poi名称并移动至该点 设置过:* mMapController.enableClick(true); 时,此回调才能被触发* */String title = "";if (mapPoiInfo != null) {title = mapPoiInfo.strText;Toast.makeText(BaseMapDemoActivity.this, title,Toast.LENGTH_SHORT).show();mMapController.animateTo(mapPoiInfo.geoPt);}}@Overridepublic void onGetCurrentMap(Bitmap b) {/*** 当调用过 mMapView.getCurrentMap()后,此回调会被触发 可在此保存截图至存储设备*/}@Overridepublic void onMapAnimationFinish() {/*** 地图完成带动画的操作(如: animationTo())后,此回调被触发*/}/*** 在此处理地图加载完成事件*/@Overridepublic void onMapLoadFinish() {Toast.makeText(BaseMapDemoActivity.this, "地图加载完成",Toast.LENGTH_SHORT).show();}};mMapView.regMapViewListener(DemoApplication.getInstance().mBMapManager,mMapListener);}@Overrideprotected void onPause() {/*** MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()*/mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {/*** MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume()*/mMapView.onResume();super.onResume();}@Overrideprotected void onDestroy() {/*** MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()*/mMapView.destroy();super.onDestroy();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mMapView.onSaveInstanceState(outState);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);mMapView.onRestoreInstanceState(savedInstanceState);}}

activity_offline:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="50dip"android:orientation="horizontal" ><TextViewandroid:id="@+id/cityid"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:text="131" /><!-- 隐藏输入法用 --><LinearLayoutandroid:layout_width="0px"android:layout_height="0px"android:focusable="true"android:focusableInTouchMode="true" /><EditTextandroid:id="@+id/city"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:text="北京" /><Buttonandroid:id="@+id/search"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/button_style"android:onClick="search"android:text="搜索" /><Buttonandroid:id="@+id/scan"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/button_style"android:onClick="importFromSDCard"android:text="导入" /></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="50dip"android:orientation="horizontal" ><TextViewandroid:id="@+id/state"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:text="已下载:--" /><Buttonandroid:id="@+id/start"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/button_style"android:onClick="start"android:text="开始" /><Buttonandroid:id="@+id/stop"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/button_style"android:onClick="stop"android:text="暂停" /><Buttonandroid:id="@+id/del"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/button_style"android:onClick="remove"android:text="删除" /></LinearLayout><LinearLayoutandroid:id="@+id/city_list"android:layout_width="match_parent"android:layout_height="50dip"android:orientation="horizontal" ><Buttonandroid:id="@+id/clButton"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/button_style"android:onClick="clickCityListButton"android:text="城市列表" /><Buttonandroid:id="@+id/localButton"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/button_style"android:onClick="clickLocalMapListButton"android:text="下载管理" /></LinearLayout><LinearLayoutandroid:id="@+id/citylist_layout"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="热门城市" /><ListViewandroid:id="@+id/hotcitylist"android:layout_width="fill_parent"android:layout_height="200dip" /><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="全国" /><ListViewandroid:id="@+id/allcitylist"android:layout_width="fill_parent"android:layout_height="fill_parent" /></LinearLayout><LinearLayoutandroid:id="@+id/localmap_layout"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="已下载城市 " /><ListViewandroid:id="@+id/localmaplist"android:layout_width="fill_parent"android:layout_height="wrap_content" /></LinearLayout></LinearLayout>

offline_localmap_list:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"android:padding="10dip" ><TextViewandroid:id="@+id/title"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:text="已下载城市 " /><TextViewandroid:id="@+id/update"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:text=""android:textColor="#FF0000" /><TextViewandroid:id="@+id/ratio"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:text="" /><Buttonandroid:id="@+id/display"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/button_style"android:text="查看" /><Buttonandroid:id="@+id/remove"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:background="@drawable/button_style"android:text="删除" /></LinearLayout>

activity_main:

<?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" ><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent"android:clickable="true" /></LinearLayout>

配置文件及Application类同之前一样。

附上图片效果:

百度地图之离线下载功能相关推荐

  1. 运用百度地图API离线版(在线版)实现网管系统中终端定位和终端信息获取的功能...

    一.了解百度地图API 1.百度地图JavaScript API简介 百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,可在网站中构建功能丰富.交互性强的地图应用 ...

  2. 最全面的百度地图JavaScript离线版开发

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5822231.html 项目要求web版百度地图要离线开发.这里总结下自己的开发过程和经验. 大概需求是:每辆 ...

  3. 基于百度地图实现Android定位功能实现(详解+教程)

    基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...

  4. 基于百度地图实现Android定位功能实现

    基于百度地图实现Android定位功能实现 初始化 一>获取SHA1 二>Android studio 配置 (1)下载百度地图sdk (2)解压安装包 (3)回到刚刚配置的jar包,右击 ...

  5. 利用百度地图的路书功能实现汽车实时定位

    最近公司做的一个app项目需要用到百度地图实时定位功能,app项目是用ionic做的,所以用的也是百度地图web版.具体需要实现的功能类似于导航的时候有个小车在地图上随着实时位置移动,本功能不需要导航 ...

  6. 查找窗口隐藏了怎么办_百度地图这些不为人知的隐藏功能

    百度地图这些不为人知的"隐藏功能",我们都知道任何一款软件都有一些我们不仔细去找就发现不了的功能,通常来说这些功能还是非常实用的,这里就来跟大家说一下百度地图里这几个总是被错过的& ...

  7. 每日新闻丨​百度地图发布语音定制功能​;Windows 10高CPU使用率问题已解

    更多精彩,请点击上方蓝字关注我们! 每日新闻播报 第09-23期  1 趋势洞察 杨元庆:制造大国变为制造强国 需重视三个转变 近日,联想集团董事长兼CEO杨元庆在2019世界制造业大会上表示,要实现 ...

  8. 百度地图api周边搜索功能

    利用百度地图api周边搜索功能,实现点击切换周边类型显示 <!DOCTYPE html> <html lang="zh-CN"> <head>& ...

  9. vue中调用百度地图实现搜索等功能

    vue中调用百度地图实现搜索等功能 在最近做电商项目时用户订单等物流信息想做的更加详细点所以加入了地图这个小功能,不是很难只是在一个未知的领域可能有点迷茫 现在也是体会到了,学新的东西还是得看官方文档 ...

  10. BaiduMap---百度地图官方Demo之调用百度地图(介绍如何调启百度地图实现自身业务功能)

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

最新文章

  1. angular例子笔记
  2. ISA2006标准版安装及无人值守安装
  3. 抢票软件原理_手机部应届生软件大赛 | SHOW MI YOUR CODE
  4. python mysql connector update_Python(Mysql Connector)如何刷新curs上的结果
  5. Dev XtraReport 正在打印弹出框如何隐藏 批量打印 静默打印
  6. MySQL利用存储过程清除所有表中的所有记录
  7. WPF插件开发:使用FrameworkElementAdapters时VS报错的问题
  8. 7位应届生讲述就业难:面试20多家公司,甚至当了保安
  9. 计算机间盘的使用方法,电脑怎样分盘操作,史上最全分盘操作教程示意图
  10. 图的存储--十字链表
  11. Unexpandable Clocks不可扩展时钟 UG903
  12. STAMP学习和使用
  13. 淘宝天猫京东补流量主要采用的方式是什么呢
  14. CodeForces-1062E LCA,DFN,RMQ
  15. The SetStack Computer UVA - 12096 集合栈计算机 set集合
  16. SpringBoot + FreeMarker + FlyingSaucer 实现PDF在线预览、打印、下载
  17. 个人笔记——PointNet初学
  18. 行车记录仪android,车叮咚:一款搭载 Android 系统的行车记录仪是怎样的?
  19. AForge学习笔记(5):AForge.Imaging(下)
  20. linux下载安装的命令,linux安装和常用命令

热门文章

  1. 数据分析与挖掘实战-航空公司客户流失分析
  2. 前端开发常见的英语词汇整理
  3. 助力疫情防控,无接触式Beacon蓝牙考勤打卡方案
  4. 各自然带代表植被_十种常见自然带所对应的植被 十种常见自然带所对应的气候类型...
  5. iphone手机投影到电脑屏幕上
  6. 嵌入式cc2530单片机ZigBee-题2控制led交替闪烁
  7. Vue中 keep-alive 详解
  8. p6spy mysql8_P6Spy监控SQL语句及性能测试
  9. 软件license授权加、解密,软件注册工具(2)
  10. 边缘检测(Laplace算子,LOG算子)