Android(安卓)APP —— “时光摄影”的搭建手记(四)
16lz
2021-01-25
在百度地图上显示Point
—— BMap API Android SDK 的简单使用1. BMap API 申请 AK
百度地图API是一套将百度地图嵌入到网页应用程序接口,可以用于构建功能丰富、交互性强的地图应用程序,支持PC端和移动端的地图应用开发。不仅如此,BMap API还提供了多个开源库,如快速实现在地图上添加Marker、自定义信息窗口、标注相关开发、区域限制设置、几何运算、实时交通、查询与公交驾车查询、鼠标绘制工具等功能。在本APP中,需要在百度地图上依据经纬度显示Point,因此APP也可以看做是一个LBS系统。
使用百度地图API需要申请AK,(点击进入申请页面),如下所示。申请过程需要参考百度地图提供的在线文档(点击进入在线文档)。
申请AK之后,需要在AndroidManifest.xml中添加如下代码:(添加在<application></application>之间)
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="你自己的AK" /> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" />
此外,还需要在AndroidManifest.xml中添加相关权限:
<pre name="code" class="html"> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 这个权限用于进行网络定位 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 这个权限用于访问GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 --> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 访问网络,网络定位需要上网 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 用于读取手机当前的状态 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.GET_TASKS" /> <!-- SD卡读取权限,用户写入离线定位数据 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- Test权限 --> <uses-permission android:name="android.permission.RUN_INSTRUMENTATION" /> <!-- 照相机权限 --> <uses-permission android:name="android.permission.CAMERA" />然后,在src/main/ 目录下新建 jniLibs目录,并将libBaiduMapSDK_vX_X_X_X.so复制到jniLibs目录下。如下图: 接下来在app/libs/ 目录下放BaiduMap的jar包,如下图所示。对每个jar包右键选择Add AS Library,导入jar包。 在 app/build.gradle文件中,dependencies{} 中添加以下代码,以便导入jar包
<span style="font-size:14px;"> compile files('libs/BaiduLBS_Android.jar') compile files('libs/baidumapapi_base_v3_7_1.jar') compile files('libs/baidumapapi_map_v3_7_1.jar') compile files('libs/baidumapapi_util_v3_7_1.jar')</span>
此外,我还在使用了butterknife,它是GitHub上的一个开源项目,使用了butterknife就不用再写findViewById()了!为了用它,需要在app/build.gradle文件中添加 :
<span style="font-size:14px;"> compile 'com.jakewharton:butterknife:7.0.0'</span>
执行完上述步骤后,重新build project,如果没有报错就OK了。
2. 实现步骤
修改activity_main.xml如下:
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.a10405.tmp.MainActivity"> <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /></RelativeLayout></span><span style="font-size:18px;"></span>
修改 MainActivity.java 如下:
<span style="font-size:14px;">package com.example.a10405.tmp.activity;import android.graphics.Color;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.Marker;import com.baidu.mapapi.map.MarkerOptions;import com.baidu.mapapi.map.OverlayOptions;import com.baidu.mapapi.map.TextOptions;import com.baidu.mapapi.model.LatLng;import com.example.a10405.tmp.R;import com.example.a10405.tmp.model.Point;import butterknife.Bind;import butterknife.ButterKnife;public class MainActivity extends AppCompatActivity { @Bind(R.id.bmapView) MapView mapView; //绑定地图控件 public BaiduMap baiduMap; //地图实例 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext // 注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); ButterKnife.bind(this); baiduMap = mapView.getMap(); LatLng latLng = new LatLng(41.802273,123.417315);//将地图移至沈阳市 MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(latLng); baiduMap.animateMapStatus(u); addMarkerOnMap(); } /** * 在地图上加载标注点 */ public void addMarkerOnMap() { for(Point point : Point.pointList) { //在地图上添加标注点marker LatLng latLngMarker = new LatLng( point.getLatitude(), point.getLongitude());// 标注点的经纬度 BitmapDescriptor mIconMaker = BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher); OverlayOptions overlayOptions = new MarkerOptions()//添加图片标注 .position(latLngMarker) .icon(mIconMaker) .zIndex(5);// 图标 Marker marker = (Marker) (baiduMap.addOverlay(overlayOptions)); OverlayOptions textOption = new TextOptions()//添加文字标注 .position(latLngMarker) .text(point.getName()) .fontSize(42) .fontColor(Color.rgb(0, 150, 64)); baiduMap.addOverlay(textOption); //绑定marker的数据 Bundle bundle = new Bundle(); bundle.putSerializable("name", point.getName()); bundle.putSerializable("pictures", point.getImgList()); marker.setExtraInfo(bundle); } } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mapView.onPause(); }}</span>
最后,真机调试的效果如下:
更多相关文章
- Android的路径信息
- Android复习笔记(11) -网络编程相关
- android中用HTTP请求将经纬度解析为具体地址街道信息!
- resolveActivity解析
- android 6.0以上添加动态权限,多条权限一起请求
- [android] android下文件访问的权限
- Android(安卓)WiFi扫描
- android IO操作
- 初探Android平台上的定位服务(GPS)