Android — 之百度地图定位+添加Mark+InfoWindow

本文介绍了Android新手如何使用百度地图SDK,包括导入库文件、配置布局和Java代码,实现地图显示、定位、添加Mark及点击显示InfoWindow的功能。详细步骤包括初始化SDK、设置地图控件、监听器以及AndroidManifest.xml的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

  新手上路,这几天在弄百度地图SDK的使用(吐槽 : 官网上的开发指南简直就是实力坑爹,可能是开发人员太忙,维护不及时吧),我对本次学习的要求也不高:能正常显示地图,能定位,能添加mark(覆盖物),点击mark时能提示当前位置信息就行,再深的东西,以后有时间再去研究吧,毕竟新手还是欠火候。
  
因为软件开发更新换代太快,各位看官看的时候可能本文内容就已经过时了,所以先交代一下开发环境:

应用开发开发工具:
  Android Studio 1.5.1

百度地图版本信息:
  Android 地图 SDK v3.7.1
  Android 定位 SDK v6.2.2

正文:

一、效果图

废话多说,先来一发截图,一眼就能看出来到底实现了哪些功能:
这里写图片描述
          图1-1.实现定位
         
这里写图片描述
        图1-2.拖拽到新的位置
 
如上面两幅图所示,图1-1显示的是当程序正常运行后,就会定位到当前位置,显示位置信息(’气泡’),图1-2显示的是当拖动mark到新的位置后,显示当前的位置信息,大家可能注意到图1-2右下角红色圆圈圈住的图标,是可以点击的,作用是实现重新定位。

二、开发过程

2.1导入库文件

去百度开发者中心下载最新的开发包,现在是支持按功能需求来下载开发包,我就贪婪的全都下载了(下载地址),最好的学习方式就是下载示例代码,模仿着写。解压下载好的库文件。
首先:在工程app/libs目录下放入BaiduLBS_Android.jar包,如图2-1所示。
然后:在src/main/目录下新建jniLibs目录,在jniLibs新建armeabi文件(这个文件要根据你的手机的cpu类型来创建,armeabi就是针对普通的或旧的arm cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm cpu),然后把动态链接库.so文件拷贝到该目录下,如图2-2所示。
最后:对于每个jar文件,右键-选择Add As Library,导入到工程中。
添加jar包
        图2-1.导入jar包文件
        
添加库文件
        图2-2.导入.so库文件

环境配置也可以参考官方指南.

2.2布局文件

修改activity_main.xml布局文件:

<?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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.yu.baidumapdemo.MainActivity">

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="百 度 地 图" />
    <com.baidu.mapapi.map.MapView
        android:id="@+id/map_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/title"
        android:clickable="true"/>
    <Button
        android:id="@+id/request_location"
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="50dp"
        android:background="@drawable/custom_loc"/>
</RelativeLayout>

布局文件如上所述,很简单,一个TextView显示一个标题(之后我用它来显示当前位置),一个com.baidu.mapapi.map.MapView,这是最重要的用来,是显示地图的控件,最后放了一个Button,就是图1-2中红圈所示的按钮,用来重新获取定位。

2.3java类代码

2.3.1初始化SDK

新建类 BaiduMapDemoApplication继承自Application

package com.yu.baidumapdemo;

import android.app.Application;

import com.baidu.mapapi.SDKInitializer;

/**
 * Created by yu on 2016-03-09.
 */
public class BaiduMapDemoApplication extends Application {
   
    @Override
    public void onCreate() {
        super.onCreate();
        // 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
        //这样就不用每个Activity都初始化一遍了
        SDKInitializer.initialize(this);
    }
}

这个类的功能很简单,因为在使用百度地图的所有功能前都需要调用SDKInitializer.initialize(android.content.Context);来初始化组件,所以新建这个类继承自Application,并在AndroidManifest.xml文件进行配置(为application添加属性 android:name=“.BaiduMapDemoApplication”),保证最先得到初始化。

2.3.2实现地图定位等功能

MainActivity.java:

package com.yu.baidumapdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.Poi;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.InfoWindow;
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.MyLocationData;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.geocode.GeoCodeResult;
import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值