Android APP —— 百度地图使用手记(四)


在百度地图上显示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>


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




         
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值