Android百度地图API开发
- 格式:doc
- 大小:538.00 KB
- 文档页数:10
工程文件结构:demoApplication.java package com.gy.mymaps;import android.app.Application;import android.content.Context;import android.widget.Toast;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.MKGeneralListener;import com.baidu.mapapi.map.MKEvent;public class DemoApplication extends Application {private static DemoApplication mInstance = null;public boolean m_bKeyRight = true;BMapManager mBMapManager = null;@Overridepublic void onCreate() {super.onCreate();mInstance = this;initEngineManager(this);}public void initEngineManager(Context context) {if (mBMapManager == null) {mBMapManager = new BMapManager(context);}if (!mBMapManager.init(new MyGeneralListener())) {Toast.makeText(DemoApplication.getInstance().getApplicationContext(),"BMapManager初始化错误!", Toast.LENGTH_LONG).show();}}public static DemoApplication getInstance() {return mInstance;}// 常用事件监听,用来处理通常的网络错误,授权验证错误等static class MyGeneralListener implements MKGeneralListener {public void onGetNetworkState(int iError) {if (iError == MKEvent.ERROR_NETWORK_CONNECT) {Toast.makeText(DemoApplication.getInstance().getApplicationContext(), "您的网络出错啦!",Toast.LENGTH_LONG).show();}else if (iError == MKEvent.ERROR_NETWORK_DA TA) {Toast.makeText(DemoApplication.getInstance().getApplicationContext(), "输入正确的检索条件!",Toast.LENGTH_LONG).show();}// ...}public void onGetPermissionState(int iError) {//非零值表示key验证未通过if (iError != 0) {//鎺堟潈Key閿欒锛�Toast.makeText(DemoApplication.getInstance().getApplicationContext(),"请输入正确的授权Key,并检查您的网络连接是否正常!error: "+iError, Toast.LENGTH_LONG).show();DemoApplication.getInstance().m_bKeyRight = false;}else{DemoApplication.getInstance().m_bKeyRight = true;Toast.makeText(DemoApplication.getInstance().getApplicationContext(),"key认证成功", Toast.LENGTH_LONG).show();}}}}Mainactivity.java:package com.gy.mymaps;import java.util.List;import android.annotation.SuppressLint;import android.app.Activity;import android.content.ContentValues;import android.database.ContentObserver;import android.database.Cursor;import android.graphics.drawable.Drawable;import .Uri;import android.os.Build;import android.os.Bundle;import android.os.Handler;import android.telephony.SmsManager;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.map.ItemizedOverlay;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.OverlayItem;import com.baidu.mapapi.search.MKAddrInfo;import com.baidu.mapapi.search.MKBusLineResult;import com.baidu.mapapi.search.MKDrivingRouteResult;import com.baidu.mapapi.search.MKPoiResult;import com.baidu.mapapi.search.MKSearch;import com.baidu.mapapi.search.MKSearchListener;import com.baidu.mapapi.search.MKShareUrlResult;import com.baidu.mapapi.search.MKSuggestionResult;import com.baidu.mapapi.search.MKTransitRouteResult;import com.baidu.mapapi.search.MKWalkingRouteResult;import api.basestruct.GeoPoint;//import com.gy.msmsend.R;public class MainActivity extends Activity {//UI相关Button mBtnReverseGeoCode = null; // 将坐标反编码为地址Button mBtnGeoCode = null; // 将地址编码为坐标Button msmSend =null; //短信发送按钮//地图相关MapView mMapView = null; // 地图View//搜索相关MKSearch mSearch = null;// 搜索模块,也可去掉地图模块独立使用EditText phoneText;String[] as;String city=null;String pos=null;Drawable marker;int png=0;//protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/** 注册短信变化事件监听*/SmsContent content = new SmsContent(new Handler());//注册短信变化监听this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);//注册短信变化监听/*** 使用地图sdk前需先初始化BMapManager.* BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建,* 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁*/DemoApplication app = (DemoApplication)this.getApplication();if (app.mBMapManager == null) {app.mBMapManager = new BMapManager(getApplicationContext());/*** 如果BMapManager没有初始化则初始化BMapManager*/app.mBMapManager.init(new DemoApplication.MyGeneralListener());}setContentView(yout.activity_main);CharSequence titleLable="我的位置";setTitle(titleLable);//地图初始化mMapView = (MapView)findViewById(R.id.bmapView);mMapView.getController().enableClick(true);mMapView.getController().setZoom(12);// 初始化搜索模块,注册事件监听mSearch = new MKSearch();mSearch.init(app.mBMapManager, new MKSearchListener() {public void onGetPoiDetailSearchResult(int type, int error) {}public void onGetAddrResult(MKAddrInfo res, int error) {if (error != 0) {String str = String.format("错误号:%d", error);Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();return;}//地图移动到该点mMapView.getController().animateTo(res.geoPt);if (res.type == MKAddrInfo.MK_GEOCODE){//地理编码:通过地址检索坐标点String strInfo = String.format("纬度:%f 经度:%f", res.geoPt.getLatitudeE6()/1e6, res.geoPt.getLongitudeE6()/1e6);Toast.makeText(MainActivity.this, strInfo, Toast.LENGTH_LONG).show();}if (res.type == MKAddrInfo.MK_REVERSEGEOCODE){//反地理编码:通过坐标点检索详细地址及周边poiString strInfo = res.strAddr;Toast.makeText(MainActivity.this, strInfo, Toast.LENGTH_LONG).show();EditText editGeoCodeKey = (EditText)findViewById(R.id.geocodekey);//设置城市editGeoCodeKey.setText(strInfo);}//生成ItemizedOverlay图层用来标注结果点ItemizedOverlay<OverlayItem> itemOverlay = new ItemizedOverlay<OverlayItem>(null, mMapView);//生成ItemOverlayItem item = new OverlayItem(res.geoPt, "", null);//为maker定义位置和边界marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());//给item设置markeritem.setMarker(marker);//在图层上添加itemitemOverlay.addItem(item);//清除地图其他图层mMapView.getOverlays().clear();//添加一个标注ItemizedOverlay图层mMapView.getOverlays().add(itemOverlay);//执行刷新使生效mMapView.refresh();}public void onGetPoiResult(MKPoiResult res, int type, int error) {}public void onGetDrivingRouteResult(MKDrivingRouteResult res, int error) {}public void onGetTransitRouteResult(MKTransitRouteResult res, int error) {}public void onGetWalkingRouteResult(MKWalkingRouteResult res, int error) {}public void onGetBusDetailResult(MKBusLineResult result, int iError) {}public void onGetSuggestionResult(MKSuggestionResult res, int arg1) {}public void onGetShareUrlResult(MKShareUrlResult result, int type,int error) {// TODO Auto-generated method stub}});// 设定地理编码及反地理编码按钮的响应mBtnReverseGeoCode = (Button)findViewById(R.id.reversegeocode);mBtnGeoCode = (Button)findViewById(R.id.geocode);msmSend = (Button)findViewById(R.id.sendButton);OnClickListener clickListener = new OnClickListener(){public void onClick(View v) {SearchButtonProcess(v);}};mBtnReverseGeoCode.setOnClickListener(clickListener);mBtnGeoCode.setOnClickListener(clickListener);msmSend.setOnClickListener(clickListener);}/*** 发起搜索* @param v*/void SearchButtonProcess(View v) {if (mBtnReverseGeoCode.equals(v)) {EditText lat = (EditText)findViewById(t);EditText lon = (EditText)findViewById(R.id.lon);//得到需要标在地图上的资源marker = getResources().getDrawable(R.drawable.ic_mark0);GeoPoint ptCenter = new GeoPoint((int)(Float.valueOf(lat.getText().toString())*1e6),(int)(Float.valueOf(lon.getText().toString())*1e6));//反Geo搜索mSearch.reverseGeocode(ptCenter);} else if (mBtnGeoCode.equals(v)) {EditText editCity = (EditText)findViewById(R.id.city);EditText editGeoCodeKey = (EditText)findViewById(R.id.geocodekey);//得到需要标在地图上的资源marker = getResources().getDrawable(R.drawable.ic_mark0);//Geo搜索mSearch.geocode(editGeoCodeKey.getText().toString(),editCity.getText().toString());}else if (msmSend.equals(v)){phoneText = (EditText)findViewById(R.id.tel);//发送短信sendMessage();}}@Overrideprotected void onPause() {mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {mMapView.onResume();super.onResume();}@Overrideprotected void onDestroy() {mMapView.destroy();mSearch.destory();super.onDestroy();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mMapView.onSaveInstanceState(outState);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);mMapView.onRestoreInstanceState(savedInstanceState);}/****/private void sendMessage() {// 获取文本框中的内容String phone_num = phoneText.getText().toString();String content ="QUERY";SmsManager smsMagager = SmsManager.getDefault();if (content.length() > 70) {List<String> sms = smsMagager.divideMessage(content);for (String con : sms) {smsMagager.sendTextMessage(phone_num, null, con, null, null);}} else {smsMagager.sendTextMessage(phone_num, null, content, null, null);}Toast.makeText(MainActivity.this,, Toast.LENGTH_LONG).show();}/** 监听短信数据库*/class SmsContent extends ContentObserver {private Cursor cursor = null;@SuppressLint("ShowToast")public SmsContent(Handler handler) {super(handler);// TODO Auto-generated constructor stu}@SuppressWarnings("deprecation")@Overridepublic void onChange(boolean selfChange) {// TODO Auto-generated method stubsuper.onChange(selfChange);EditText phonenum=(EditText)findViewById(R.id.tel);String telnum="+86"+phonenum.getText().toString();// 读取收件箱中指定号码的短信cursor = managedQuery(Uri.parse("content://sms/inbox"),new String[] { "_id", "address", "read", "body" }," address=? and read=?",new String[] {telnum,"0" }, "_id desc");// 按id排序,如果按date排序的话,修改手机时间后,读取的短信就不准了if (cursor != null && cursor.getCount() > 0) {ContentValues values = new ContentValues();values.put("read", "1"); // 修改短信为已读模式cursor.moveToNext();int smsbodyColumn = cursor.getColumnIndex("body");String smsBody = cursor.getString(smsbodyColumn);getmypos(smsBody);//开启搜索//经纬度EditText lat = (EditText)findViewById(t);EditText lon = (EditText)findViewById(R.id.lon);//设置输入框的内容lat.setText(as[2]);lon.setText(as[1]);//得到需要标在地图上的资源getpng(png);GeoPoint ptCenter = new GeoPoint((int)(Float.valueOf(lat.getText().toString())*1e6), (int)(Float.valueOf(lon.getText().toString())*1e6));//反Geo搜索mSearch.reverseGeocode(ptCenter);}// 在用managedQuery的时候,不能主动调用close()方法,否则在<a href="/pro/ydad/" target="_blank" class="keylink">Android</a> 4.0+的系统上,会发生崩溃if (Build.VERSION.SDK_INT < 14) {cursor.close();}}}//字符串处理private void getmypos(String str){System.out.println(str = str.replaceAll("\\D", "_").replace("_+", "_"));as = str.split("_+");float a=(float) (Float.valueOf(as[1])/1e6);float b=(float) (Float.valueOf(as[2])/1e6);png=Integer.parseInt(as[5]);as[1]=a+"";as[2]=b+"";}//根据数据中的朝向改变图标private void getpng(int num){switch(num){case 0:marker = getResources().getDrawable(R.drawable.ic_mark0);break;case 1:marker = getResources().getDrawable(R.drawable.ic_mark01);break;case 2:marker = getResources().getDrawable(R.drawable.ic_mark02);break;case 3:marker = getResources().getDrawable(R.drawable.ic_mark03);break;case 4:marker = getResources().getDrawable(R.drawable.ic_mark04);break;case 5:marker = getResources().getDrawable(R.drawable.ic_mark05);break;case 6:marker = getResources().getDrawable(R.drawable.ic_mark06);break;case 7:marker = getResources().getDrawable(R.drawable.ic_mark07);break;case 8:marker = getResources().getDrawable(R.drawable.ic_mark08);break;case 9:marker = getResources().getDrawable(R.drawable.ic_mark09);break;case 10:marker = getResources().getDrawable(R.drawable.ic_mark10);break;case 11:marker = getResources().getDrawable(R.drawable.ic_mark11);break;default:marker = getResources().getDrawable(R.drawable.ic_mark0);break;}}}Activity_main.xml:<RelativeLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent" android:layout_height="match_parent"tools:context=".MainActivity"><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent" android:clickable="true"/><EditTextandroid:id="@+id/lat"android:layout_width="125dp"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:ems="10"android:text="39.904965"/><Buttonandroid:id="@+id/reversegeocode"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/lat"android:layout_alignBottom="@+id/lat"android:layout_alignParentRight="true"android:text="查找"/><Buttonandroid:id="@+id/geocode"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_alignTop="@+id/geocodekey"android:text="查找"/><Buttonandroid:id="@+id/sendButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBottom="@+id/tel"android:layout_alignParentRight="true"android:text="发送"/><EditTextandroid:id="@+id/lon"android:layout_width="125dp"android:layout_height="wrap_content"android:layout_alignTop="@+id/reversegeocode"android:layout_toRightOf="@+id/lat"android:ems="10"android:text="116.327764"/><EditTextandroid:id="@+id/geocodekey"android:layout_width="250dp"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_below="@+id/reversegeocode"android:ems="20"android:text="北京市海淀区上地十街10号"><requestFocus/></EditText><EditTextandroid:id="@+id/city"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_below="@+id/reversegeocode"android:layout_toLeftOf="@+id/geocode"android:ems="10"android:text=""/><EditTextandroid:id="@+id/tel"android:layout_width="250dp"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_below="@+id/geocodekey"android:ems="15"android:text="1503769891"/>"</RelativeLayout>Manifest.xml:<?xml version="1.0"encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.gy.mymaps"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="10"android:targetSdkVersion="10"/><applicationandroid:name="com.gy.mymaps.DemoApplication"android:debuggable="true"android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"><meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="O5h23uRrcyxbaiZs3w7skruP"/><activityandroid:name="com.gy.mymaps.MainActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="UNCHER"/> </intent-filter></activity></application><uses-permission android:name="android.permission.GET_ACCOUNTS"/><uses-permission android:name="E_CREDENTIALS"/> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.INTERNET"/><uses-permissionandroid:name="uncher.permission.READ_SETTINGS"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permissionandroid: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.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.SEND_SMS"/><uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 读取消息 --><uses-permission android:name="android.permission.READ_SMS"/><!-- 写入消息 --><uses-permission android:name="android.permission.WRITE_SMS"/><!-- 对屏幕的支持 --><supports-screensandroid:anyDensity="true"android:largeScreens="true"android:normalScreens="false"android:resizeable="true"android:smallScreens="true"/></manifest>String.xml:<?xml version="1.0"encoding="utf-8"?><resources><string name="app_name">mymaps</string><string name="action_settings">Settings</string><string name="info">短信发送成功</string></resources>该app是通过发送QUEST到一个返回位置信息的设备,返回的短信接收的短信格式(可以通过修改字符串处理方法来修改处理方法):#Lon=116486291,Lat=39899332,Speed=0,Alt=65,Direction=0#。
本科毕业论文(设计)题目Android平台下基于百度地图API的地图导航设计专业电子信息科学与技术作者姓名刘茂强学号**********单位物理科学与信息工程学院指导教师郎丰法2014 年 05月教务处编原创性声明本人郑重声明:所提交的学位论文是本人在导师指导下,独立进行研究取得的成果。
除文中已经引用的内容外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得聊城大学或其他教育机构的学位证书而使用过的材料。
对本文的研究作出重要贡献的个人和集体,均在文中以明确的方式表明。
本人承担本声明的相应责任。
学位论文作者签名:日期:指导教师签名:日期:目录前言 (9)1.绪论 (10)1.1 背景及意义 (10)1.2 研究现状 (10)1.3 研究课题主要内容 (11)1.3.1 地点搜索和位置定位 (11)1.3.2 附近搜索 (11)1.3.3 路线规划 (11)1.3.4 公交线路查询 (11)1.3.5 GPS导航 (11)1.4 论文结构 (11)2.Android平台与开发环境 (13)2.1 Android系统 (13)2.1.1 后缀简介 (13)2.1.2 应用组件 (13)2.1.3 系统运行库 (14)2.2 Eclipse (14)2.2.1 基本介绍 (14)2.2.2 主要组成 (15)2.2.3 软件开发包 (15)2.3 Android开发环境搭建 (15)3.相关配置和框架结构 (16)3.1 工程配置 (16)3.1.1 Android SDK的配置 (16)3.1.2 定位SDK的配置 (16)3.1.3 导航SDK的配置 (16)3.2 密钥申请 (17)3.2.1 密钥简介 (17)3.2.2 申请步骤 (17)3.3 配置AndroidManisfet.xml (19)3.3.1权限配置 (19)3.3.2 添加对应的开发密钥 (19)3.3.3 声明service组件 (19)3.4 程序结构 (19)4.主页面设计 (21)4.1 基本配置 (21)4.1.1 配置main.xml (21)4.1.2 配置AndroidManifest.xml (21)4.2 MainActivity代码设计 (21)4.2.1创建地图MainActivity,并import相关类 (22)4.2.2 MainActivity变量定义 (22)4.2.3 MainActivity主要变量初始化 (22)4.2.4 各控件设置 (22)4.2.5 选择菜单 (23)4.2.6 搜索事件处理 (24)4.2.7 定位事件处理 (25)5.附近搜索设计 (26)5.1 基本配置 (26)5.1.1 配置near.xml (26)5.1.2 AndroidManifest.xml (26)5.2 NearActivity代码设计 (26)5.2.1 创建地图NearActivity,并import相关类 (26)5.2.2 NearActivity变量定义 (26)5.2.3 NearActivity主要变量初始化 (27)5.2.4 各控件设置 (27)5.2.5 事件处理 (27)6.路线规划设计 (29)6.1 基本配置 (29)6.1.1 配置way.xml (29)6.1.2 AndroidManifest.xml (29)6.2 WayActivity代码设计 (29)6.2.1 创建地图WayActivity,并import相关类 (29)6.2.2 WayActivity变量定义 (29)6.2.3 WayActivity主要变量初始化 (30)6.2.4 各控件设置 (30)6.2.5 搜索结果处理 (31)6.2.6 节点浏览 (31)7.公交查询设计 (34)7.1 基本配置 (34)7.1.1 配置bus.xml (34)7.1.2 AndroidManifest.xml (34)7.2 BusActivity代码设计 (34)7.2.1 创建地图BusActivity,并import相关类 (34)7.2.2 BusActivity变量定义 (35)7.2.3 WayActivity主要变量初始化 (35)7.2.4 各控件设置 (35)7.2.5 事件处理 (35)8.驾车导航设计 (38)8.1 基本配置 (38)8.1.1 配置navigation.xml (38)8.1.2 AndroidManifest.xml (38)8.2 NavigationActivity代码设计 (38)8.2.1 创建地图NavigationActivity,并import相关类 (38)8.2.2 NavigationActivity变量定义 (39)8.2.3 NavigationActivity主要变量初始化 (39)8.2.4 设置单击事件 (39)总结 (42)致谢 (43)参考文献 (44)附录 (45)摘要在近年来移动设备智能化、轻便化的趋势下,地图导航已经成为人们出行必不可少的工具,给人们的生活带来了极大的便利。
百度地图API百度地图API应用实例Michael Tian目录百度地图API (3)1基础知识 (3)1.1 百度地图 API 概念 (3)1.2 百度地图的“Hello, World” (3)1.2.1 引用百度地图API文件 (5)1.2.2创建地图容器元素 (5)1.2.3命名空间 (5)1.2.4创建地图实例 (5)1.2.5创建点坐标 (6)1.2.6 初始化地图 (6)1.2.7地图操作 (6)2应用示例 (6)2.1 Map类 (7)2.2 ExtJs (7)2.2.1 将百度地图嵌入到Ext中 (8)2.2.2 在Ext中显示百度地图 (10)2.3 向地图添加标注 (10)2.4 为标注添加信息窗口 (11)2.5 标注与数据列表的联动 (12)2.6 数据列表与标注的联动 (12)2.7 创建可拖拽的标注 (14)3折线 (14)3.1添加多边形 (14)3.2样式设置 (16)4自定义标注 (16)5 文本标注 (17)5.1 添加一个文本标注 (17)5.2 文本位置偏移值 (18)5.3 自定义Label (19)5.4 添加滑动门效果 (20)6参考资料 (21)百度地图API1基础知识1.1 百度地图 API 概念百度地图API是一套由JavaScript语言编写的应用程序接口,它能够帮助您在网站中构建功能丰富、交互性强的地图应用程序。
百度地图API不仅包含构建地图的基本功能接口,还提供了诸如本地搜索、路线规划等数据服务。
1.2 百度地图的“Hello, World”开始学习百度地图API最简单的方式是看一个简单的示例。
以下代码创建了一个520x340<meta http-equiv="Content-Type"content="text/html; charset=gbk"/> <title>Hello, World</title><scriptsrc=/api?key=46ce9d0614bf7aefe0ba562f8cf87194 &v=1.0&services=false type="text/javascript"></script></head><body><div style="width: 520px; height: 340px; border: 1px solid gray"id="container"></div></body></html><script type="text/javascript">var map = new BMap.Map("container"); // 创建Map实例var point = new BMap.Point(116.404, 39.915); // 创建点坐标map.centerAndZoom(point,15); // 初始化地图,设置中心点坐标和地图级别。
百度地图定位开发——Android地图sdk开发百度地图Android定位SDK是为Android移动端应⽤提供的⼀套简单易⽤的定位服务接⼝,专注于为⼴⼤开发者提供最好的综合定位服务。
通过使⽤百度定位SDK,开发者可以轻松为应⽤程序实现智能、精准、⾼效的定位功能。
打开百度地图sdk开发,输⼊应⽤名称这⾥需要输⼊SHA1,具体寻找SHA1过程可以参考官⽅的⽂档创建成功后,下载官⽅的jar包,将解压后的所有⽂件添加到申请AK时使⽤的项⽬⽂件中的lib⽬录中。
然后在app⽬录下的build.gradle⽂件中android块中配置sourceSets标签,内容如下:sourceSets {main {jniLibs.srcDir 'libs'}}此时就能将部分⽬录添加到项⽬视图中,现在需要将jar⽂件添加到项⽬视图中。
在app⽬录的build.gradle的dependencies块中添加以下代码,然后右键⽬标jar⽂件,选择Add as library,就能将其加⼊到项⽬视图中。
implementation files('libs\\BaiduLBS_Android.jar')然后打开AndroidManifest.xml⽂件,在<application>中加⼊如下代码配置开发密钥AK,并且根据官⽅⽂档,添加权限显⽰地图我们在xml⽂件的代码中直接输⼊<com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="411dp"android:layout_height="662dp"android:clickable="true"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"tools:ignore="MissingClass" />然后我们需要初始化地图,创建⼀个activitypackage com.example.zty_map;import androidx.appcompat.app.AppCompatActivity;import android.app.Application;import android.os.Bundle;import com.baidu.mapapi.CoordType;import com.baidu.mapapi.SDKInitializer;public class MAPZTY1 extends Application {@Overridepublic void onCreate() {super.onCreate();//在使⽤SDK各组件之前初始化context信息,传⼊ApplicationContextSDKInitializer.initialize(this);//⾃4.3.0起,百度地图SDK所有接⼝均⽀持百度坐标和国测局坐标,⽤此⽅法设置您使⽤的坐标类型. //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
百度地图导航Demo1). 开发环境配置:在新建的Android工程下的libs文件夹内添加百度导航SDK 的jar包:galaxy_mini.jar,android_api_1.1_forsdk.jar,BaiduLBS_Android.jar;在libs文件夹下新建armeabi文件夹,并导入下载相关的.so包:libapp_BaiduNaviApplib_v1_0_0.so,libCNPackage.so,libejTTS.so,liblocnaviSDK.so。
(这是下载带有TTS的)BaiduMapNaviSDK.rar资源包:2). 在Android工程的Manifest.xml文件中的配置:a. 在<application>标签下添加2个标签:<service>、<meta-data>:<meta-data android:name = "com.baidu.lbsapi.API_KEY"android:value = "您为这个Android工程申请的百度地图key"/> <service android:name = "com.baidu.navi.location.f"android:enable = "true" />b. 添加使用百度导航sdk的权限:<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permissionandroid:name="android.permission.BAIDU_LOCATION_SERVICE"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCES_MOCK_LOCATION"/> <uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permissionandroid:name="uncher.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"/><uses-permission android:name="android.permission.GET_TASKS"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.BROADCAST_STICKY"/><uses-permission android:name="android.permission.WRITE_SETTINGS"/><uses-permissionandroid: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"/>3). 代码实现部分:a. 在app入口Activity(第一个Activity)中初始化导航引擎:public calss MainActivity extends ACtivity{private boolean mIsEngineInitSuccess = false;private NaviEngineInitListener mListener = newNaviEngineInitListener(){ @Overridepublic void engineInitFail(){}@Overridepublic void engineInitStart(){}@Overridepublic void engineInitSuccess(){mIsEngineInitSuccess = true;} };private String getSdcardDir(){if(Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)){return Environment.getExternalStorageDirectory().toString();}return null;}@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.activity_main);//初始化导航引擎2种方法//第一种:末尾参数为nullBaiduNaviManager.getInstance().initEngine(this,getSdcardDir(), mListener, null);//第二种:末尾参数不为nullBaiduNaviManager.getInstance().initEngine(this,getSdcardDir(), mListener, new LBSAuthManager(){ @Overridepublic void onAuthResult(int status, String msg){String str = null;if(status == 0) str ="key校验成功";else str = "key校验成功" + msg;Log.v("KEY_STATUS", str);}});//前往导航页的buttonButton naviPageBtn = (Button)findViewById(R.id.navi_page);naviPageBtn.setOnClickListener(new OnClickListener(){ @Overridepublic void onClick(View v){Intent intent = new Intent(MainActivity.this,RouteGuideDemoActivity.class);startActivity(intent);}});}}b. activty_main.xml文件的内容:<LinearLayout xmlns:android ="/apk/res/android"android:layout_width = "fill_parent"android:layout_height = "fill_parent"android:orientation = "vertical"><Button android:id = "@+id/navi_page"android:layout_width = "fill_parent"android:layout_height = "fill_parent"android:text = "前往导航页" /></LinearLayout>c. 配置导航结果显示页:具体方法步骤:右键你的工程包->New->Class->填写class名字(下面的有一个Superclass属性填写为android.app.Activity).如下图:PS:此页不需要配置.xml文件在Manifest.xml文件的<application>标签下加入导航显示的声明<activity android:name =".BNavigatorActivity"android:configChanges ="orientation|screenSize|keyboard|keyboardHidden"/>BNavigatorActivity.class文件:public class BNavigatorActivity extends Activity{private IBnavigatorListener mListener = new IBnavigatorListener(){ @Overridepublic void ontifyGPSStatusData(int arg0){}@Overridepublic void ontifyLocateData(LocData arg0){}@Overridepublic void ontifyNmeaData(String arg0){}@Overridepublic void ontifySensorData(SensorData arg0){}@Overridepublic void ontifyStartNav(){BaiduNaviManager.getInstance().dismissWaitProgressDialog();}@Overridepublic void ontifyViewModeChanged(int arg0){}@Overridepublic void onPageJump(int times, Object arg0){//页面跳转回调if(IBNavigatorListener.PAGE_JUMP_WHEN_GUIDE_END == times)finish();else if(IBNavigatorListener.PAGE_JUMP_WHEN_ROUTE_PLAN_FAIL ==times) finish();}@Overridepublic void onYawingRequestStart(){}@Overridepublic void onYawingRequestSuccess(){}};@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);//创建NMapViewMapGLSurfaceView nMapView = BaiduNaviManager.getInstance().createNMapView(getApplicationContext());//创建导航视图View navigatorView = BNavigator.getInstance().init(this,getIntent().getExtras(), nMapView);//填充视图setContentView(navigatorView);BNavigator.getInstance().setListener(mListener);BNavigator.getInstance().startNav();//初始化TTS,可以使用非百度导航sdk提供的ttsBNTTSPlayer.initPlayer();//设置TTS播放回调BNavigatorTTSPlayer.setTTSPlayerListener(newIBNTTSPlayerLister(){ @Overridepublic int playTTSText(String str, int arg){return BNTTSPlayer.playTTSText(str, arg);}@Overridepublic void phoneHangUp(){}@Overridepublic void phoneCalling(){}@Overridepublic int getTTSState() {return BNTTSPlayer. getTTSState(); } });BNRoutePlanner.getInstance().setObserver(new RoutePlanObserver(this, new iJumpToDownloadListener(){@Overridepublic void onJumpToDownloadOfflineData(){}}));}//重写管理api:onPause(), onResume, onDestroy(), onBackPressed()@Overridepublic void onResume(){BNavigator.getInstance().resume();super.onResume();BNMapController.getInstance().onResume();}@Overridepublic void onResume(){BNavigator.getInstance().pause();super.onPause();BNMapController.getInstance().onPause();}@Overridepublic void onDestroy(){BNavigator.destroy();BNRoutePlanner.getInstance().setObserver(null);super. onDestroy ();}@Overridepublic void onBackPressed(){BNavigator.getInstance().onBackPressed ();}}d. 发起导航页的Activity(RouteGuideDemoActivity).xml文件:<LinearLayout xmlns:android ="/apk/res/android"android:layout_width = "fill_parent"android:layout_height = "fill_parent"android:orientation = "vertical"><Button android:id = "@+id/start_btn"android:layout_width = "wrap_content"android:layout_height = "wrap_content"android:text = "一键导航" /></LinearLayout>.classpublic class RouteGuideDemoActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.activity_route_guide_demo);Button startBtn = (Button)findViewById(R.id.start_btn);startBtn.setOnClickListener(new SelfBtnClickListener());}private class SelfBtnClickListener implements OnClickListener(){ @Overridepublic void onClick(View v){switch(v.getId()){case R.id.start_btn:selfLaunchNavigator();break;default:break;}}}private void selfLaunchNavigator(){BaiduNaviManager.getInstance().launchNavigator(this,40.06803, 116.30142, "百度大厦", //起始点39.90882, 116.39750, "天安门", //终点RoutePlan_Mode.ROUTE_PLAN_MODE_MIN_TIME, //算路方式true, //真实导航(true or false)BaiduNaviManager.STRATEGY_FORCE_ONLINE_FRIORIT, //在离线策略new OnStartNavigationListener(){ //跳转监听@Overridepublic void onJumpToNavigator(Bundle bundle){Intent intent = new Intent(RouteGuideDemoActivity.this,BNavigatorActivity.class);intent.putExtras(bundle);startActivity(intent);}@Overridepublic void onJumpToDownloader(){}});}}。
百度应用开发教程百度应用开发教程百度是中国最大的互联网公司之一,旗下有众多热门应用,如百度搜索、百度地图、百度音乐等。
如果你想为百度开发应用,本文将为你提供一个简单的百度应用开发教程。
让我们开始吧!步骤一:了解百度开放平台首先,你需要了解百度的开放平台。
百度开放平台提供了丰富的开发者资源和工具,帮助开发者构建各种应用。
你可以访问百度开放平台的官方网站,注册一个开发者账号,并了解关于开发者文档、API接口、SDK等相关信息。
步骤二:选择开发语言和环境百度开发平台支持多种开发语言和环境。
你可以根据自己的熟悉程度和应用需求选择合适的开发语言和环境。
常见的选择包括Java、Python、PHP等语言,以及Eclipse、Android Studio等开发工具。
在你选择开发环境之前,记得先安装好相应的软件和工具。
步骤三:注册应用和获取API密钥在开始开发之前,你需要在百度开放平台上注册一个应用,并获取API密钥。
这个密钥是用于应用认证和鉴权的重要凭证。
在注册应用的过程中,你需要填写应用名称、描述、类型等基本信息,并选择你要使用的API接口。
步骤四:学习API文档和示例代码百度开放平台的文档提供了详细的API接口说明、调用方法和示例代码。
在开始开发之前,你应该仔细阅读相关的API文档,了解接口的参数、返回值等信息。
同时,百度开放平台也提供了一些示例代码,你可以参考这些代码来快速入门。
步骤五:开发你的应用现在,你可以开始开发你的应用了!根据你的需求,选择合适的API接口和方法,并根据API文档中的描述进行开发。
你可以使用百度提供的SDK来简化开发过程,SDK中已经封装好了一些常用的功能和方法。
在开发过程中,记得合理使用API密钥进行认证和鉴权。
步骤六:调试和测试在开发完成后,你需要对应用进行调试和测试,确保应用的功能和性能满足用户的需求。
你可以使用开发工具提供的调试功能,检查代码的运行情况,并对应用进行功能和兼容性测试。
百度地图API基本使⽤(⼆)本⽂系作者原创,转载请私信并在⽂章开头附带作者和原⽂地址链接。
违者,作者保留追究权利。
前⾔PS:我所使⽤的的是百度地图Javascript API 3.0本⽂是对之前使⽤的延续,继续对百度地图API的⼀些使⽤去做归纳和总结,本次主要是对地图上的覆盖物这块做介绍,如果有⼩伙伴没有看过之前的,可以先去观看⼀下,前期所需要的⼀些准备,以及⼀些基本的⽤法。
感兴趣的⼩伙伴可以⾃⾏查看百度地图官⽅提供的⽂档开发⽂档中的JavaScript API也可以通过下⽅⽰例中⼼更直观的看到百度地图API的⼀些使⽤,以及它的⼀些特性不过要注意:实例中⼼使⽤的是BMapGL去创建容器的,最新版GL地图命名空间为BMapGL, 可按住⿏标右键控制地图旋转、修改倾斜⾓度。
由于本次使⽤的是BMapGL所以在引⼊API的时候也不太⼀样引⼊⽅式如下:<script type="text/javascript" src="///api?type=webgl&v=1.0&ak=您的密钥"></script>好的,废话不多说,开整百度地图API-覆盖物在讲覆盖物之前,先给⼤家讲⼀下覆盖物的添加和删除的⽅法,这个是通⽤的,下⾯各种类型的覆盖的添加和删除的使⽤是⼀样的。
在我们获取到容器之后,根据⾃⼰的需求创建好⾃⼰的覆盖物对象之后,如果我们需要添加覆盖物的话,就可以使⽤容器对象.addOverlay(覆盖物对象);如果我们需要清除覆盖物的话,只需要使⽤容器对象.clearOverlays();就可以清除所有,但是如果只是想清除某⼀个覆盖物的话,我们需要使⽤容器对象.removeOverlays(覆盖物对象);代码⽰例如下://创建容器var map = new BMapGL.Map('allmap');var point = new BMapGL.Point(116.404, 39.915);map.centerAndZoom(point, 15);// 创建点覆盖物var marker = new BMapGL.Marker(new BMapGL.Point(116.404, 39.915));//添加覆盖物map.addOverlay(marker);//删除具体覆盖物map.removeOverlays(marker);//删除所有覆盖物map.clearOverlays();1. 点覆盖物点覆盖物主要使⽤的是Marker这个⽅法,例如:var marker1 = new BMapGL.Marker(new BMapGL.Point(经度, 纬度));这样就创建好了⼀个点覆盖物对象,我们需要使⽤上⾯介绍的添加覆盖物的⽅法,将覆盖物添加到容器中,即容器对象.addOverlay(marker1)这样就实现了简单的点覆盖物,不过有的时候需要我们的覆盖物能够拖动,所以这个时候就要⽤到⼀个属性enableDragging,默认情况下是false,也就是说在上⾯的那些默认创建的⽅式这个属性都是false,这是属性字⾯意思也很好理解⽀持拖拽,所以如果有需要拖拽的需求,我们只需要将整个属性设置为true。
Android使⽤百度定位SDK⽅法及错误处理之前我的项⽬中的位置定位使⽤的是基站⽅法,使⽤的Google提供的API,但是前天中午突然就不返回数据了,到⽹上搜了⼀下才知道,Google的接⼝不提供服务了,基于时间紧迫⽤了百度现有的SDK,但是在使⽤过程中第⼀次获取位置总是空值,经过多次实验终于成功。
当然,如果需要精确的位置,你可以再加上位置偏移算法。
我的应⽤对这个要求不⾼,就没做,⼀搜⼀⼤把,就不多说了。
下⾯这段话来⾃百度地图API>定位SDK百度地图定位SDK免费对外开放,⽆需申请key。
在使⽤百度定位SDK前,希望先阅读百度定位地图的API。
如果使⽤则被视为对使⽤条款的完全接收,并同意接收本协议的各项条款约束。
⽬前百度地图定位SDK只⽀持Android和Symbian量⼤平台,其他产品正在开放中。
下⾯事例是使⽤Android平台的部分代码。
对于这个平台百度的开放⼈员已经写了完整的demo,把⼯程导⼊到eclipse中之后⼀般没有错误,如果报错的话,eclipse也会给出提⽰。
⼀般可以通过将propertie.properties⽂件名字改为default.properties就可以了,如果还有错误的话,显⽰⼯程activity错误啊什么的,就是SDK版本不对的问题了,你可以通过他的manifest⽂件查看<uses-sdk android:minSdkVersion="8" />找到这个最⼩值,⽐如我下载的是2.6他的最低版本是5,我eclipse默认版本是8,就可以同过右键单击该⼯程,选择最下⾯那个properties 项,然后在弹出对话框的右侧列表中选择Android,在左侧选择API level为5,也就是2.0,然后确定。
就⽊有问题了。
下⾯说⼀下使⽤该API的具体步骤:也可以查看百度定位SDK⾃⼰的开发指南1、⾸先第⼀步就是搭配环境:①先将百度demo中的libs⽂件夹复制到⾃⼰的⼯程。
百度地图API使⽤(JS案例Web服务器案例)前⾔这⼏天在项⽬中⽤到了百度地图这个插件,所以准备花点时间记录⼀下⼼得,好东西就要分享出来!1. 百度地图使⽤⽅式1.11.2 申请AK我的需求时web端,所有这⾥选择了浏览器端。
⽩名单上线前使⽤*号,线上正式ak请设置合理的IP⽩名单2.主要学习: 定位技术、路径规划和导航2.1 打开2.2 点击开发指南中的2.3⾄此,我们就快速创建了⼀张以天安门为中⼼的地图~注意: ak=必须时⾃⼰申请的3. 常见相关API 可以在这⾥查找这⾥只介绍⼀些常⽤的3.11<!DOCTYPE html>2<html>3<head>4<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />5<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />6<title>Hello, World</title>7<style type="text/css">8html{9height:100%10}11body{12height:100%;13margin:0px;14padding:0px 15}16#container{17height:100%18}19</style>20<script type="text/javascript" src="https:///api?v=3.0&ak=iG0Qt0gY2IMtf99aZe0j7d1cNnXxIhwM"></script>21</head>2223<body>24<div id="container"></div>25<script type="text/javascript">26// 创建地图实例27var map = new BMap.Map("container");28// 创建点坐标29var point = new BMap.Point(116.404, 39.915);30// 初始化地图,设置中⼼点坐标和地图级别31map.centerAndZoom(point, 15);32</script>33</body>34</html>3.2可以给地图中的点添加标注,添加标注的时候要⼀个point(坐标)对象,把标注添加到坐标位置。
android 百度地图定位功能实现00package com.example.foreveross.office;100200import com.baidu.location.BDLocation;300import com.baidu.location.BDLocationListener;400import com.baidu.location.LocationClient;500import com.baidu.location.LocationClientOption;600import com.baidu.mapapi.BMapManager;700import com.baidu.mapapi.map.LocationData;800import com.baidu.mapapi.map.MKMapViewListener;901import com.baidu.mapapi.map.MapController;01import com.baidu.mapapi.map.MapPoi;101import com.baidu.mapapi.map.MapView;201import com.baidu.mapapi.map.MyLocationOverlay;301import api.basestruct.GeoPoint; 401import com.example.wenandroid.R;50101import android.app.Activity;701import android.content.res.Configuration; 801import android.location.Location;902import android.location.LocationListener; 002import android.location.LocationManager;102import android.os.Bundle;202import android.view.Menu;302import android.widget.FrameLayout;402import android.widget.Toast;502602public class MapActivity extends Activity { 702BMapManager mBMapMan = null;802MapView mMapView = null;903MapController mMapController;03MyLocationOverlay mLocationOverlay;103 LocationData locData = null;033LocationClient mLocClient;03 4 public MyLocationListenner myListener = new MyLocationListenner();035036@Override037protected void onCreate(Bundle savedInstanceState) {038super.onCreate(savedInstanceState);039mBMapMan = new BMapManager(getApplication());04mBMapMan.init("BB3299207a600b8a035b76982adde60f", null);041setContentView(yout.activity_main);042mMapView = (MapView) findViewById(R.id.bmapsView);043mMapView.setBuiltInZoomControls(true);044// 设置启用内置的缩放控件045mMapController = mMapView.getController();046mMapController.setZoom(12);// 设置地图zoom级别04704 // 定位初始化04mLocClient = new LocationClient(this);905locData = new LocationData();05mLocClient.registerLocationListener(myListener);105LocationClientOption option = new LocationClientOption(); 205option.setOpenGps(true);// 打开gps305option.setCoorType("bd09ll"); // 设置坐标类型405option.setScanSpan(5000);505mLocClient.setLocOption(option);605mLocClient.start();705805// 定位图层初始化906mLocationOverlay = new MyLocationOverlay(mMapView);06// 设置定位数据106mLocationOverlay.setData(locData);206// 添加定位图层306 mMapView.getOverlays().add(mLocationOverlay);065mLocationOverlay.enableCompass(); 066// 修改定位数据后刷新图层生效067mMapView.refresh();068069}07//实现监听器07 1 public class MyLocationListenner implements BDLocationListen er {072073@Override074public void onReceiveLocation(BDLocation location) {075if (location == null)076return ;077078titude = location.getLatitude();079locData.longitude = location.getLongitude();08//如果不显示定位精度圈,将accuracy赋值为0即可081locData.accuracy = location.getRadius(); 082locData.direction = location.getDerect();083//更新定位数据084mLocationOverlay.setData(locData);085//更新图层数据执行刷新后生效086mMapView.refresh();087//是手动触发请求或首次定位时,移动到定位点08808 9 mMapController.animateTo(newGeoPoint((int)(locData .latitude* 1e6), (int)(locData.longitude * 1e6)));09}091092public void onReceivePoi(BDLocation poiLocation) {093if (poiLocation == null){094return ;095}096}09}709809@Override910protected void onDestroy() {10// TODO Auto-generated method stub 110mMapView.destroy();2103 if (mBMapMan != null) {104 mBMapMan.destroy();10mBMapMan = null;510}610super.onDestroy();710}810911@Override11protected void onPause() {111// TODO Auto-generated method stub 211mMapView.onPause();311if (mBMapMan != null) {411mBMapMan.stop();511}611super.onPause();711}811912@Override12protected void onResume() {112// 获取位置管理者,视图根据位置监听更新位置2123 mLocationOverlay.getMyLocation();124 mLocationOverlay.enableCompass();12mMapView.onResume();512if (mBMapMan != null) {612mBMapMan.start();712}812super.onResume();913}131132 }需要用到的jar包大家可以到百度地图api网站上下载。
百度手机地图使用教程篇一:百度手机地图Android版离线地图安装使用说明(图)百度手机地图Android版离线地图安装使用说明(图)百度手机地图Android版离线地图安装使用说明:第一步:将下载好的离线地图包解压缩。
第二步:找到解压出的"baidumap"文件夹,把它放入手机存储卡根目录。
注:在上述过程中如遇提示“是否移动或复制文件夹”,点击“是”即可。
第三步:断开与电脑连接,打开百度手机地图(如已打开请重启),系统会提示安装成功。
篇二:Android开发教程:百度地图初学Android开发教程:百度地图初学用户在使用ApI之前需要获取百度地图移动版ApIKey,并且该KeY 与您引用ApI的程序名称有关,具体流程请参照:申请ApIKeY (/wiki/static/imap/key/)百度地图ApI支持Android1.5及以上系统。
070D16824be96bbbeFb4740D638c82835123404bApI添加到Andoid工程中必须先得下载ApI开发包:点击下载/wiki/static/imap/files/android/baidumapApi_Lib_An droid_1.3.0.zip解压之后包括两个文件baidumapapi.jar和libbmapApiengine.so。
在工程根目录下创建ibs\armeabi目录,并拷贝到其目录下。
在工程属性->Javabuildpath->Libraries中选择“AddJARs”,选定baidumapapi.jar,确定后返回,这样您就可以在您的程序中使用ApI 了。
在manifest中添加使用权限1.">2.>3.ssion>4.ge">es-permission>6./uses-permission>es-permission>在manifest中添加Android版本支持1.2.android:normalscreens="true"android:smallscreens="true"3.android:resizeable="true"android:anyDensity="true"/>4.让创建的地图Activity继承com.baidu.mapapi.mapActivity,并import 相关类代码里的import相关类有些可能用不着,这的取决你的功能。
2005年百度地图PC版地图上线。
2010年4月百度地图正式为开发者免费开放地图API。
2011年4月百度地图Android 移动端App上线。
2012年12月百度地图整合API、SDK、云服务等优质资源,建立开放平台,成体系开放百度地图数据与技术。
2014年9月百度地图移动端月活用户过亿。
2015年4月see you again加德满都古迹复原活动上线。
2016年12月百度地图国际化地图覆盖全球。
2017年7月百度地图发布新品牌愿景:科技让出行更简单。
2018年6月百度地图实时交通监测与研判分析平台(百度交通研判平台2.0)正式上线。
2018年11月15日,百度地图上线“急救车让行播报”功能,并在北京、江西九江两地率先落地使用。
2019年4月,百度地图推出“世园会一键智能游”服务,集小度AI导游、AI识花、精细化3D底图、全景虚拟游、美食及酒店等功能于一体,基于地图能力为用户提供有价值的景区信息及游玩内容推荐,串联景区出游的各个场景。
2019年7月11日,百度地图V10.17.0发布,支持预测路况、智能避堵,语音查找更智能,全网一键呼叫出租专快车、AR实景复原圆明园遗址原貌等功能。
2021年6月创新上线新能源导航与通勤租房功能。
2021年9月百度地图上线“打车未来出行预测” 可根据未来时段路况规划打车时间。
2021年12月23日,百度地图宣布,第二代车道级导航正式上线。
百度地图第二代车道借助北斗+ 5G,在实现全程车道级导航效果的基础上,全面升级最优车道推荐、全/ 分屏动态导航框架、危险场景护航提示等优势功能。
百度地图第二代车道级导航已适配全部安卓和iOS 手机机型,覆盖全国高快速路段。
截止2021年12月,百度地图96%的数据加工环节已实现AI化,道路覆盖里程达1100万公里,覆盖全球1.8亿POI,拥有超过20亿张全景照片。
百度地图每天的位置服务请求响应次数也已突破1300亿次,累计服务超60万的移动应用。
移动应用开发中的地图功能实现方法随着智能手机的普及和移动互联网的发展,地图功能在移动应用中的应用越来越广泛。
无论是出行导航、地址查询还是位置分享,地图功能都扮演着重要的角色。
本文将介绍移动应用开发中的地图功能实现方法,包括地图API的选择、基本地图功能的添加以及地图与其他功能的结合运用。
1.地图API的选择在移动应用中实现地图功能时,首先需要选择合适的地图API。
目前市面上主流的地图API包括百度地图API、高德地图API和谷歌地图API等。
百度地图API是国内最流行的地图API之一,具有丰富的功能和友好的用户界面。
使用百度地图API可以实现地图的显示、定位、路径规划、周边搜索等功能。
百度地图API还提供了一些特色功能,如鹰眼轨迹、电子围栏、地理编码等,可以满足不同应用场景的需求。
高德地图API是另一个备受开发者青睐的地图API。
高德地图API除了基本的地图显示、定位、路径规划等功能外,还提供了一些独特的功能,如实时路况、驾车导航、公交换乘等。
尤其是在出行类应用中,高德地图API的导航功能表现优秀,使用人数众多。
谷歌地图API是一款国际化程度较高的地图API,具有全球覆盖的优势。
谷歌地图API提供了丰富的地图图层、交通信息、卫星图像等功能,支持定位、标记、搜索等操作。
对于需要跨国应用的开发者来说,谷歌地图API无疑是一个不错的选择。
在选择地图API时,需要综合考虑自身的应用需求、地图数据的准确性、开发难度以及API的稳定性等因素。
2.基本地图功能的添加选择了合适的地图API后,接下来就是将地图显示到应用界面上,并添加基本的地图功能。
首先,根据地图API的文档,引入相关的地图SDK和必要的权限设置,以确保地图功能正常运行。
其次,根据应用需求,决定地图的初始位置和缩放级别,并设置地图的显示样式,如地图类型、地图控件、地图标记等。
可以根据用户的需求,实现不同的交互效果,如地图的拖动、缩放、旋转等。
然后,通过地图API提供的定位功能,实现用户的实时定位和定位点的显示。
最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不多,本篇文章就带领大家在自己的Android项目中加入百度地图的功能,接下来我会写一系列关于百度地图的文章,欢迎大家到时候关注!一申请API key∙在使用百度地图之前,我们必须去申请一个百度地图的API key,申请地址/apiconsole/key,自己自行注册一个百度账号,很快就能申请到的,如下图∙点击"创建密钥",系统将为我们自动生成密钥,当然我们在使用密钥之前还必须配置,点击"设置"如下图Key type 选择“for mobile”,安全码是Android签名证书的证书指纹(SHA1)值+ “;” + 你的应用程序包名,所以当你配置好了API key 你不能随意更换应用程序的包名,如果更换了包名我们需要重新配置API key,接下来我们来介绍怎么获取数字签名我们知道我们开发的Android程序是需要给他签名的,如果没有签名是不允许被安装到手机或者模拟器的,那么你会有疑问,我平常开发的应用确实没签名,怎么能在模拟器或者手机上直接运行呢,其实ADT会自动的使用debug密钥为应用程序签名,当然你也可以自己创建一个属于你自己的密钥,直接用Eclipse可视化创建就行了,很方便的,这里我就不介绍了这里我们用debug.keystore来生成Android签名证书的证书指纹(SHA1)值,可以在eclipse中直接查看:winows -> preferance -> android -> build。
如下图示:然后我们使用keytool工具来获取签名证书的sha1值,在DOS输入keytool -list-keystore C:\Users\bds\.android\debug.keystore红色部分为debug.keystore的路径,接下来会要你输入输入密钥库口令,默认输入“android”,这样子我们就能获取证书指纹(SHA1),如下图红色框框里面的东西就是我们需要的Android签名证书的证书指纹(SHA1)值,然后我们复制出来,输入到API key的安全码输入框里面,再用分号隔开加上你的应用程序包名,如 02:5C:80:25:B2:8F:6F:60:54:B9:F4:B2:EF:94:FF:EE:CC:3C:5A:29;com.example.baidu mapdemo 这样子我们就配置好了API key二、下载百度地图API库要在Android应用中使用百度地图API,就需要在工程中引用百度地图API开发包,下载地址/map/sdkandev-download.htm,下载Android SDKv2.1.3 lib库就行了三、在Android项目中引用百度地图新建Android项目 BaiduMapDemo,然后将百度地图API库加入工程,如下图∙在布局文件中添加百度地图控件,[html]view plaincopy1.<?xml version="1.0"encoding="utf-8"?>2.<LinearLayout xmlns:android="/apk/res/android"3.android:layout_width="fill_parent"4.android:layout_height="fill_parent"5.android:orientation="vertical">6.7.<com.baidu.mapapi.map.MapView8.android:id="@+id/bmapView"9.android:layout_width="fill_parent"10.android:layout_height="fill_parent"11.android:clickable="true"/>12.13.</LinearLayout>∙Activity界面代码,注释的很详细,相信你看得懂[java]view plaincopy1.package com.example.baidumapdemo;2.3.import android.app.Activity;4.import android.graphics.Bitmap;5.import android.os.Bundle;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.import com.baidu.mapapi.map.MKMapViewListener;12.import com.baidu.mapapi.map.MapController;13.import com.baidu.mapapi.map.MapPoi;14.import com.baidu.mapapi.map.MapView;15.import api.basestruct.GeoPoint;16.17.public class MainActivity extends Activity {18.private Toast mToast;19.private BMapManager mBMapManager;20./**21. * MapView 是地图主控件22. */23.private MapView mMapView = null;24./**25. * 用MapController完成地图控制26. */27.private MapController mMapController = null;28./**29. * MKMapViewListener 用于处理地图事件回调30. */31. MKMapViewListener mMapListener = null;32.33.@Override34.protected void onCreate(Bundle savedInstanceState) {35.super.onCreate(savedInstanceState);36./**37. * 使用地图sdk前需先初始化BMapManager,这个必须在setContentView()先初始化38. */39. mBMapManager = new BMapManager(this);40.41.//第一个参数是API key,42.//第二个参数是常用事件监听,用来处理通常的网络错误,授权验证错误等,你也可以不添加这个回调接口43. mBMapManager.init("7ae13368159d6a513eaa7a17b9413b4b", new MKGeneralListener() {45.//授权错误的时候调用的回调函数46.@Override47.public void onGetPermissionState(int iError) {48.if (iError == MKEvent.ERROR_PERMISSION_DENIED) {49. showToast("API KEY错误, 请检查!");50. }51. }52.53.//一些网络状态的错误处理回调函数54.@Override55.public void onGetNetworkState(int iError) {56.if (iError == MKEvent.ERROR_NETWORK_CONNECT) {57. Toast.makeText(getApplication(), "您的网络出错啦!", Toast.LENGTH_LONG).show();58. }59. }60. });61.62.63. setContentView(yout.activity_main);64.65. mMapView = (MapView) findViewById(R.id.bmapView);66.67./**68. * 获取地图控制器69. */70. mMapController = mMapView.getController();71./**72. * 设置地图是否响应点击事件 .73. */74. mMapController.enableClick(true);75./**76. * 设置地图缩放级别77. */78. mMapController.setZoom(12);79.80./**81. * 显示内置缩放控件82. */83. mMapView.setBuiltInZoomControls(true);84.85./**86. * 保存精度和纬度的类,88. GeoPoint p = new GeoPoint((int)(22.547923 * 1E6), (int)(114.067368 * 1E6));89.//设置p地方为中心点90. mMapController.setCenter(p);91. mMapView.regMapViewListener(mBMapManager, new MKMapViewListener() {92.93./**94. * 地图移动完成时会回调此接口方法95. */96.@Override97.public void onMapMoveFinish() {98. showToast("地图移动完毕!");99. }100.101./**102. * 地图加载完毕回调此接口方法103. */104.@Override105.public void onMapLoadFinish() {106. showToast("地图载入完毕!");107. }108.109./**110. * 地图完成带动画的操作(如: animationTo())后,此回调被触发111. */112.@Override113.public void onMapAnimationFinish() {114.115. }116.117./**118. * 当调用过 mMapView.getCurrentMap()后,此回调会被触发119. * 可在此保存截图至存储设备120. */121.@Override122.public void onGetCurrentMap(Bitmap arg0) {123.124. }125.126./**127. * 点击地图上被标记的点回调此方法128. *129. */130.@Override131.public void onClickMapPoi(MapPoi arg0) {132.if (arg0 != null){133. showToast(arg0.strText);134. }135. }136. });137. }138.139.140.141.@Override142.protected void onResume() {143.//MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()144. mMapView.onResume();145.super.onResume();146. }147.148.149.150.@Override151.protected void onPause() {152.//MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()153. mMapView.onPause();154.super.onPause();155. }156.157.@Override158.protected void onDestroy() {159.//MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()160. mMapView.destroy();161.162.//退出应用调用BMapManager的destroy()方法163.if(mBMapManager != null){164. mBMapManager.destroy();165. mBMapManager = null;166. }167.168.super.onDestroy();169. }170.171.172.173./**174. * 显示Toast消息175. * @param msg176. */177.private void showToast(String msg){178.if(mToast == null){179. mToast = Toast.makeText(this, msg, Toast.LENGTH_SHORT);180. }else{181. mToast.setText(msg);182. mToast.setDuration(Toast.LENGTH_SHORT);183. }184. mToast.show();185. }186.187.188.}1. BMapManager是地图的引擎类,这个必须在setContentView方法之前被实例化,我们需要使用其方法init(String strKey,MKGeneralListener listener)来加入API key,MKGeneralListener 该接口返回网络状态,授权验证等结果,我们需要实现该接口以处理相应事件2. MapView就是我们的地图控件了,MapView有和Activity同步的生命周期,例如onResume() ,onPause() ,onRestoreInstanceState(Bundle state) ,destroy()等,我们可以通过getController()方法获取地图控制器MapController,这个对象可用于控制和驱动平移和缩放等3. MapView有两个接口可以注册,分别是MKMapTouchListener(地图点击事件监听器),MKMapViewListener(地图监听器)上面的Demo我给MapView注册了MKMapViewListener,也简单实现了里面的几个方法,接下来我会带着大家详细的了解这里面的方法,希望大家到时候关注我的博客当然,我们在程序运行之前,还必须加入相对于的权限[html]view plaincopy1.<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>2.<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>3.<uses-permission android:name="android.permission.INTERNET"/>4.<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>5.<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>6.<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>7.<uses-permission android:name="android.permission.READ_PHONE_STATE"/>运行结果好了,结束了.此篇文章是转载的csdn的一篇博客,谢谢原博主吧。