创建一个简单android百度地图应用
2014-03-20 19:42
661 查看
1.首先新建一个安卓工程
2.申请一个属于自己的key(key 相当于百度地图的通行证)
http://developer.baidu.com/map/android-mobile-apply-key.htm
由于版本修改,对key进行了升级,我们可以申请最新的,也可以选择以前的。这里就不做解释了
3.在AndroidManifest.xml中设置权限和添加屏幕的支持
<!-- 设置权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 添加对屏幕的支持 -->
<supports-screens android:largeScreens="true"
android:normalScreens="true" android:smallScreens="true"
android:resizeable="true" android:anyDensity="true"/>
4.jar包的添加 新建一个libs目录 放入下面两个文件
接着把baidumapapi.jar添加到构建路径中 右键---Build Path---Add....
5.在布局文件中写入支持百度地图显示试图控件
<com.baidu.mapapi.MapView android:id="@+id/bmapView"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:clickable="true"
/>
到这里一个简单的android应用的百度地图的环境就搭建好了。
这里开始就是工程代码了:
package com.scme.activity;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKBusLineResult;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.MKEvent;
import com.baidu.mapapi.MKPoiInfo;
import com.baidu.mapapi.MKPoiResult;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MKSearchListener;
import com.baidu.mapapi.MKSuggestionResult;
import com.baidu.mapapi.MKTransitRouteResult;
import com.baidu.mapapi.MKWalkingRouteResult;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.RouteOverlay;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
public class MainActivity extends MapActivity{
// // 百度地图的相关控件
private MapView mapView;
// 加载百度地图引擎(控制开,关,显示等)
private BMapManager bMapManager;
// 百度地图的key
private String key = "这里输入你申请的key";
// 在百度地图上容器控件
//private MapController mapController;
//搜索公交线路
private MKSearch mkSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (com.baidu.mapapi.MapView) findViewById(R.id.bmapView);
bMapManager = new BMapManager(MainActivity.this);
bMapManager.init(key, new MKGeneralListener() {
@Override
public void onGetPermissionState(int arg0) {
// TODO Auto-generated method stub
if (arg0 == MKEvent.ERROR_PERMISSION_DENIED) {
Toast toast = Toast.makeText(MainActivity.this, "验证key失败",
Toast.LENGTH_LONG);
toast.show();
}
}
@Override
public void onGetNetworkState(int arg0) {
// TODO Auto-generated method stub
if (arg0 == MKEvent.ERROR_NETWORK_CONNECT) {
Toast toast = Toast.makeText(MainActivity.this, "网络连接失败",
Toast.LENGTH_LONG);
toast.show();
}
}
});
// 初始化Activity
initMapActivity(bMapManager);
//公交路线
mkSearch = new MKSearch();
mkSearch.init(bMapManager, new MySearchListner());
//参数1:城市 参数2:公交车号
mkSearch.poiSearchInCity("北京", "717");
// 设置启用缩放功能
mapView.setBuiltInZoomControls(true);
// mapController = mapView.getController();
//地图中标注一个点需要设置经纬度(地理坐标点,由纬度+经度构成)
// GeoPoint gePoint = new GeoPoint(
// (int) (39.9150494981 * 1E6), (int) (116.4037758869 * 1E6));
// 设置地图中心点
// mapController.setCenter(gePoint);
//设置缩放级别 12倍
mapController.setZoom(12);
//显示交通地图
//mapView.setTraffic(true);
//显示卫星地图
// mapView.setSatellite(true);
}
private final class MySearchListner implements MKSearchListener {
@Override
public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
// TODO Auto-generated method stub
if (arg0 == null || arg1 != 0) {
Log.i("info", "未找到结果");
return;
}
// 创建覆盖物对象
RouteOverlay routelay = new RouteOverlay(MainActivity.this, mapView);
routelay.setData(arg0.getBusRoute());
mapView.getOverlays().clear();
mapView.getOverlays().add(routelay);
mapView.invalidate();
// 动画形式描述公交站点
//mapView.getController().animateTo(arg0.getBusRoute().getStart());
}
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetPoiDetailSearchResult(int arg0, int arg1) {
// TODO Auto-generated method stub
}
// 获取公交线路图的uid,并根据此uid发起此公交线路图的查询
@Override
public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
if (arg0 == null || arg2 != 0) {
Log.i("info", "未找到结果");
return;
}
// 定义公交线路图的描述对象
MKPoiInfo mkInfo = null;
// 获取本次检索的公交线路的总站点数
int totalpoiNum = arg0.getNumPois();
for (int i = 0; i < totalpoiNum; i++) {
mkInfo = arg0.getPoi(i);
if (mkInfo.ePoiType == 2) {
break;
}
}
mkSearch.busLineSearch("北京", mkInfo.uid);
}
@Override
public void onGetRGCShareUrlResult(String arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (bMapManager != null) {
bMapManager.destroy();
bMapManager = null;
}
}
// onCreate之后,以及每次横竖切屏,还有从其他界面返回的时候,都会调用onResume()
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (bMapManager != null) {
// 重新启动
bMapManager.start();
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
if (bMapManager != null) {
bMapManager.stop();
}
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
以上是查看公交路线的代码
需要查看其他功能的只需修改其中的一部分代码即可:
查看地图信息:
// 初始化Activity
initMapActivity(bMapManager);
// mkSearch = new MKSearch();
// mkSearch.init(bMapManager, new MySearchListner());
// //参数1:城市 参数2:公交车号
// mkSearch.poiSearchInCity("北京", "717");
// 设置启用缩放功能
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
// // 地图中标注一个点需要设置经纬度(地理坐标点,由纬度+经度构成)
GeoPoint gePoint = new GeoPoint(
(int) (39.9150494981 * 1E6), (int) (116.4037758869 * 1E6));
// 设置地图中心点
mapController.setCenter(gePoint);
//设置缩放级别
mapController.setZoom(12);
// //显示交通地图
// //mapView.setTraffic(true);
// //显示卫星地图
// mapView.setSatellite(true);
查看交通地图代码:
// 初始化Activity
initMapActivity(bMapManager);
// mkSearch = new MKSearch();
// mkSearch.init(bMapManager, new MySearchListner());
// //参数1:城市 参数2:公交车号
// mkSearch.poiSearchInCity("北京", "717");
// 设置启用缩放功能
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
// // 地图中标注一个点需要设置经纬度(地理坐标点,由纬度+经度构成)
// GeoPoint gePoint = new GeoPoint(
// (int) (39.9150494981 * 1E6), (int) (116.4037758869 * 1E6));
// 设置地图中心点
// mapController.setCenter(gePoint);
//设置缩放级别
mapController.setZoom(12);
// //显示交通地图
mapView.setTraffic(true);
// //显示卫星地图
// mapView.setSatellite(true);
查看卫星视图代码:
// 初始化Activity
initMapActivity(bMapManager);
// mkSearch = new MKSearch();
// mkSearch.init(bMapManager, new MySearchListner());
// //参数1:城市 参数2:公交车号
// mkSearch.poiSearchInCity("北京", "717");
// 设置启用缩放功能
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
// // 地图中标注一个点需要设置经纬度(地理坐标点,由纬度+经度构成)
// GeoPoint gePoint = new GeoPoint(
// (int) (39.9150494981 * 1E6), (int) (116.4037758869 * 1E6));
// 设置地图中心点
// mapController.setCenter(gePoint);
//设置缩放级别
mapController.setZoom(12);
// //显示交通地图
//mapView.setTraffic(true);
// //显示卫星地图
mapView.setSatellite(true);
另附:jar包,项目工程以及百度开发文档教材
2.申请一个属于自己的key(key 相当于百度地图的通行证)
http://developer.baidu.com/map/android-mobile-apply-key.htm
由于版本修改,对key进行了升级,我们可以申请最新的,也可以选择以前的。这里就不做解释了
3.在AndroidManifest.xml中设置权限和添加屏幕的支持
<!-- 设置权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 添加对屏幕的支持 -->
<supports-screens android:largeScreens="true"
android:normalScreens="true" android:smallScreens="true"
android:resizeable="true" android:anyDensity="true"/>
4.jar包的添加 新建一个libs目录 放入下面两个文件
接着把baidumapapi.jar添加到构建路径中 右键---Build Path---Add....
5.在布局文件中写入支持百度地图显示试图控件
<com.baidu.mapapi.MapView android:id="@+id/bmapView"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:clickable="true"
/>
到这里一个简单的android应用的百度地图的环境就搭建好了。
这里开始就是工程代码了:
package com.scme.activity;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKBusLineResult;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.MKEvent;
import com.baidu.mapapi.MKPoiInfo;
import com.baidu.mapapi.MKPoiResult;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MKSearchListener;
import com.baidu.mapapi.MKSuggestionResult;
import com.baidu.mapapi.MKTransitRouteResult;
import com.baidu.mapapi.MKWalkingRouteResult;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.RouteOverlay;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
public class MainActivity extends MapActivity{
// // 百度地图的相关控件
private MapView mapView;
// 加载百度地图引擎(控制开,关,显示等)
private BMapManager bMapManager;
// 百度地图的key
private String key = "这里输入你申请的key";
// 在百度地图上容器控件
//private MapController mapController;
//搜索公交线路
private MKSearch mkSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (com.baidu.mapapi.MapView) findViewById(R.id.bmapView);
bMapManager = new BMapManager(MainActivity.this);
bMapManager.init(key, new MKGeneralListener() {
@Override
public void onGetPermissionState(int arg0) {
// TODO Auto-generated method stub
if (arg0 == MKEvent.ERROR_PERMISSION_DENIED) {
Toast toast = Toast.makeText(MainActivity.this, "验证key失败",
Toast.LENGTH_LONG);
toast.show();
}
}
@Override
public void onGetNetworkState(int arg0) {
// TODO Auto-generated method stub
if (arg0 == MKEvent.ERROR_NETWORK_CONNECT) {
Toast toast = Toast.makeText(MainActivity.this, "网络连接失败",
Toast.LENGTH_LONG);
toast.show();
}
}
});
// 初始化Activity
initMapActivity(bMapManager);
//公交路线
mkSearch = new MKSearch();
mkSearch.init(bMapManager, new MySearchListner());
//参数1:城市 参数2:公交车号
mkSearch.poiSearchInCity("北京", "717");
// 设置启用缩放功能
mapView.setBuiltInZoomControls(true);
// mapController = mapView.getController();
//地图中标注一个点需要设置经纬度(地理坐标点,由纬度+经度构成)
// GeoPoint gePoint = new GeoPoint(
// (int) (39.9150494981 * 1E6), (int) (116.4037758869 * 1E6));
// 设置地图中心点
// mapController.setCenter(gePoint);
//设置缩放级别 12倍
mapController.setZoom(12);
//显示交通地图
//mapView.setTraffic(true);
//显示卫星地图
// mapView.setSatellite(true);
}
private final class MySearchListner implements MKSearchListener {
@Override
public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
// TODO Auto-generated method stub
if (arg0 == null || arg1 != 0) {
Log.i("info", "未找到结果");
return;
}
// 创建覆盖物对象
RouteOverlay routelay = new RouteOverlay(MainActivity.this, mapView);
routelay.setData(arg0.getBusRoute());
mapView.getOverlays().clear();
mapView.getOverlays().add(routelay);
mapView.invalidate();
// 动画形式描述公交站点
//mapView.getController().animateTo(arg0.getBusRoute().getStart());
}
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetPoiDetailSearchResult(int arg0, int arg1) {
// TODO Auto-generated method stub
}
// 获取公交线路图的uid,并根据此uid发起此公交线路图的查询
@Override
public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
if (arg0 == null || arg2 != 0) {
Log.i("info", "未找到结果");
return;
}
// 定义公交线路图的描述对象
MKPoiInfo mkInfo = null;
// 获取本次检索的公交线路的总站点数
int totalpoiNum = arg0.getNumPois();
for (int i = 0; i < totalpoiNum; i++) {
mkInfo = arg0.getPoi(i);
if (mkInfo.ePoiType == 2) {
break;
}
}
mkSearch.busLineSearch("北京", mkInfo.uid);
}
@Override
public void onGetRGCShareUrlResult(String arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (bMapManager != null) {
bMapManager.destroy();
bMapManager = null;
}
}
// onCreate之后,以及每次横竖切屏,还有从其他界面返回的时候,都会调用onResume()
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (bMapManager != null) {
// 重新启动
bMapManager.start();
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
if (bMapManager != null) {
bMapManager.stop();
}
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
以上是查看公交路线的代码
需要查看其他功能的只需修改其中的一部分代码即可:
查看地图信息:
// 初始化Activity
initMapActivity(bMapManager);
// mkSearch = new MKSearch();
// mkSearch.init(bMapManager, new MySearchListner());
// //参数1:城市 参数2:公交车号
// mkSearch.poiSearchInCity("北京", "717");
// 设置启用缩放功能
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
// // 地图中标注一个点需要设置经纬度(地理坐标点,由纬度+经度构成)
GeoPoint gePoint = new GeoPoint(
(int) (39.9150494981 * 1E6), (int) (116.4037758869 * 1E6));
// 设置地图中心点
mapController.setCenter(gePoint);
//设置缩放级别
mapController.setZoom(12);
// //显示交通地图
// //mapView.setTraffic(true);
// //显示卫星地图
// mapView.setSatellite(true);
查看交通地图代码:
// 初始化Activity
initMapActivity(bMapManager);
// mkSearch = new MKSearch();
// mkSearch.init(bMapManager, new MySearchListner());
// //参数1:城市 参数2:公交车号
// mkSearch.poiSearchInCity("北京", "717");
// 设置启用缩放功能
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
// // 地图中标注一个点需要设置经纬度(地理坐标点,由纬度+经度构成)
// GeoPoint gePoint = new GeoPoint(
// (int) (39.9150494981 * 1E6), (int) (116.4037758869 * 1E6));
// 设置地图中心点
// mapController.setCenter(gePoint);
//设置缩放级别
mapController.setZoom(12);
// //显示交通地图
mapView.setTraffic(true);
// //显示卫星地图
// mapView.setSatellite(true);
查看卫星视图代码:
// 初始化Activity
initMapActivity(bMapManager);
// mkSearch = new MKSearch();
// mkSearch.init(bMapManager, new MySearchListner());
// //参数1:城市 参数2:公交车号
// mkSearch.poiSearchInCity("北京", "717");
// 设置启用缩放功能
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
// // 地图中标注一个点需要设置经纬度(地理坐标点,由纬度+经度构成)
// GeoPoint gePoint = new GeoPoint(
// (int) (39.9150494981 * 1E6), (int) (116.4037758869 * 1E6));
// 设置地图中心点
// mapController.setCenter(gePoint);
//设置缩放级别
mapController.setZoom(12);
// //显示交通地图
//mapView.setTraffic(true);
// //显示卫星地图
mapView.setSatellite(true);
另附:jar包,项目工程以及百度开发文档教材
相关文章推荐
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- 解決Linux下Android开发真机调试设备不被识别问题
- [Android]在代码里运行另一个程序的方法
- [软件咨询]WPS2012正式版已发布 金山Office移动版4.0发布
- Android笔记-Linux Kernel Ftrace (Function Trace)解析
- android USB如何修改VID具体实现
- Android增量升级的方法和原理详细介绍
- Android Mouse实现过程详细笔记
- 深入Android Browser配置管理的详解
- Android Mms之:深入理解对话列表管理
- Android APP与媒体存储服务的交互
- android 多线程技术应用
- Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解
- JS中引用百度地图并将百度地图的logo和信息去掉
- Android数据类型之间相互转换系统介绍
- 通过Android trace文件分析死锁ANR实例过程
- Android实现左右滑动效果的方法详解
- Android 各国语言缩写及简称详细介绍