在百度地图上显示Point

—— BMap API Android SDK 的简单使用

1. BMap API 申请 AK

百度地图API是一套将百度地图嵌入到网页应用程序接口,可以用于构建功能丰富、交互性强的地图应用程序,支持PC端和移动端的地图应用开发。不仅如此,BMap API还提供了多个开源库,如快速实现在地图上添加Marker、自定义信息窗口、标注相关开发、区域限制设置、几何运算、实时交通、查询与公交驾车查询、鼠标绘制工具等功能。在本APP中,需要在百度地图上依据经纬度显示Point,因此APP也可以看做是一个LBS系统。


使用百度地图API需要申请AK,(点击进入申请页面),如下所示。申请过程需要参考百度地图提供的在线文档(点击进入在线文档)。



需要说明的是,Android Studio 本身提供了使用Terminal的功能,因此不必使用Windows 控制台也能获取SHA1



申请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>


最后,真机调试的效果如下:



更多相关文章

  1. Android的路径信息
  2. Android复习笔记(11) -网络编程相关
  3. android中用HTTP请求将经纬度解析为具体地址街道信息!
  4. resolveActivity解析
  5. android 6.0以上添加动态权限,多条权限一起请求
  6. [android] android下文件访问的权限
  7. Android(安卓)WiFi扫描
  8. android IO操作
  9. 初探Android平台上的定位服务(GPS)

随机推荐

  1. python进阶训练营
  2. 小数据、高准确率的文本分类:利用迁移学习
  3. 我从过去八个月的AI公司面试中学到了什么
  4. 因为AI,Blued成为垂直社交产品里“不一样
  5. flowable 流程图片汉字的乱码问题
  6. 都 2021 年了,居然还有人在手写测试数据?
  7. 体系课-数据可视化入门到精通-打造前端差
  8. 我擦!发红包遇到了微信抖动!
  9. 用 Python + Appium 的方式自动化清理微
  10. 快到春节了,用 Python 实现一场烟花秀