老师居然检查作业了!因为之前做过一点,熬夜做了一下,太久没搞安卓了,感觉之前学的全忘了:(。
功能演示
老师的要求是实现输入经纬度,在地图中显示该坐标位置信息
通过网上经纬度查询系统查得桥楼餐厅经纬度为(30.481074,114.393158)
通过在app中输入经纬度,显示位置
实现方法
百度地图api服务
要使用百度地图服务,首先当然要在百度地图开发平台申请账号,然后按步骤在控制台创建应用,获取应用key
注意两个版本SHA1值的获取方法和区别,包名也要与你AS里工程包名一致
按照百度地图开发指南实现AS配置
主要为导入jar包和.so文件,并在AndroidManifest文件中添加key和所需权限。
<meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="nCo1q2jVq0p54bV02CXZTy04aCbri8NR" />
实现百度地图的基础显示
创首先需要创建一个AS工程,并新建一个基础活动(activity),在活动的布局文件中添加百度地图控件,用于显示地图
<com.baidu.mapapi.map.MapViewandroid:id="@+id/mmap"android:layout_width="match_parent"android:layout_height="match_parent" ></com.baidu.mapapi.map.MapView>
然后在java文件中引用该地图控件,并通过mapview.getmap()方法实现地图的显示
别忘了通过.initialize方法实现初始化
private MapView mMapView = null; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext());SDKInitializer.setCoordType(CoordType.BD09LL); setContentView(R.layout.activity_main); //获取地图控件引用 mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); }
通过marker实现简单的点标记
在百度地图开发指南中详细介绍了如何通过marker实现点标记,使用实例如下
//定义Maker坐标点 LatLng point = new LatLng(39.963175, 116.400244); //构建Marker图标 BitmapDescriptor bitmap = BitmapDescriptorFactory .fromResource(R.drawable.icon_marka); //构建MarkerOption,用于在地图上添加Marker OverlayOptions option = new MarkerOptions() .position(point) .icon(bitmap); //在地图上添加Marker,并显示
为了显示更加清晰,通过以下方法修改地图缩放级别和中心点
MapStatus mMapStatus = new MapStatus.Builder().target(point).zoom(20).build();MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);mBaiduMap.setMapStatus(mapStatusUpdate);
因为老师要求坐标通过自己输入,所以带来两个问题,一是如何将输入坐标edittext类型数据转换成double型,二是如何将输入活动中的坐标数据传到显示活动(另一个activity)中,以实现演示的那种效果
数据类型转换
final double a = Double.parseDouble(lat.getText().toString());final double b = Double.parseDouble(lng.getText().toString());
数据传递
intent.putExtra("a",a);intent.putExtra("b",b);startActivity(intent);
数据接收
Bundle bundle = this.getIntent().getExtras();a = bundle.getDouble("a",a);b = bundle.getDouble("b",b);
需要注意的问题
对不同cpu架构兼容问题
由于不同虚拟机或真机的CPU架构会有区别,在调试时可能会出现CPU架构不兼容的问题,在app包下的build.gradle文件中添加以下设置可解决
splits {abi {enable truereset()include 'x86', 'armeabi-v7a', 'x86_64'universalApk true}}
新建Application类实现context统一初始化
==在SDK各功能组件使用之前都需要调用
SDKInitializer.initialize(getApplicationContext());,建议该方法放在Application的初始化方法中 ==
public class DemoApplication extends Application {@Overridepublic void onCreate() {super.onCreate(); SDKInitializer.initialize(this);SDKInitializer.setCoordType(CoordType.BD09LL);}}