IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 安卓实现百度地图定位 -> 正文阅读

[移动开发]安卓实现百度地图定位

1.获取开发密钥(AK)

百度地图 SDK开发密钥的申请地址为:https://lbs.baidu.com/apiconsole/key

申请步骤大致可分为如下四个步骤:

1若您未登录百度账号,请登录您的百度账号,如下图:

sign.png

(若您没有百度账号,点击右下角根据提示注册并登录)

2登录后将进入API控制台,如下图:

?

3点击“创建应用”开始申请开发密钥,如下图:

?

4填写应用名称,注意应用类型选择“Android SDK”、正确填写SHA1 和 程序包名(SHA1和包名的获取方法见下文)。如图:

creatandroid_data2.png

2.获取包名

根据您使用的开发工具,包名的获取方式有所不同。

使用 Android Studio 开发

在app目录下的build.gradle文件中找到applicationId,并确保其值与AndroidManifest.xml中定义的package相同。

and_ak13.png

and_ak14.png

获取SHA1

调试版本(debug)和发布版本(release)下的 SHA1 值是不同的,发布 apk 时需要根据发布 apk 对应的 keystore 重新配置 Key。(注意:我们这里使用的是调试版本,在开发时请使用调试版本) 。?

Android Studio场景使用keytool

1进入控制台(以Mac为例,Windows则进入cmd控制台,同样执行下述命令),执行”cd .android”定位到”.android”文件夹下。

Ak_03.jpg

2继续在控制台输入命令:

调试版本使用指令:keytool -list -v -keystore debug.keystore
发布版本请使用指令:keytool -list -v -keystore apk 的 keystore

AK_02.jpg

我首先是查到keytools和keystore的路径,然后在安卓中进入keytools目录,再用命令keytool -list -v+keystore路径+debug.keystore

3输入口令:

调试版本默认密码是: android,发布模式的密码是apk的keystore设置的密码。输入密钥后回车(如果没设置密码,可直接回车),此时可在控制台显示的信息中获取SHA1值,如下图所示:

key.jpg

Android Studio配置

1下载开发包

普通的地图服务和包含步骑行导航的地图服务需要下载不同的开发包,点击下载开发包
1、下载普通开发包
? ?第二行选择基础地图服务
? ?

downloads1.png


2、下载步骑行导航的开发包
? ?第二行选择步骑行导航(含基础地图)
? ?

downloads2.png


注: 其他的功能(如定位服务、检索功能、全景图功能等则根据您的开发需要下载)

2将开发包拷贝至工程(截图以普通地图服务的开发包为例,步骑行导航的开发包同理)

1、添加jar文件
? ? ?打开解压后的开发包文件夹,找到BaiduLBS_Android.jar文件将其拷贝至工程的app/libs目录下,如图:
? ? ?

Androidstudio1.png


2、添加so文件
? ? ?有两种方法可以往项目中添加so文件。
? ? ?方法一:
? ??在下载的开发包中拷贝需要的CPU架构对应的so文件文件夹到app/libs目录下,如图:
? ? ??

Androidstudio3.png

? ? ?
? ? ?在app目录下的build.gradle文件中android块中配置sourceSets标签,如果没有使用该标签则新增,详细配置代码如下:

 
sourceSets { ??? ??????
 main { ??????? ??????
 jniLibs.srcDir 'libs' ??? ????
?? } ??? }

注意:Jar文件和so文件的版本号必须一致,并且保证Jar文件与so文件是同一版本包取出的。?
方法二:

? ? ?在src/main/目录下新建jniLibs目录(如果您的项目中已经包含该目录不用重复创建),在下载的开发包中拷贝项目中需要的CPU架构对应的so文件文件夹到jniLibs目录,如图:
? ? ?

Androidstudio2.png

3往工程中添加jar文件

?在工程配置中需要将前面添加的jar文件集成到我们的工程中。
?
? ? ? ?在libs目录下,选中每一个jar文件(此处只有一个BaiduLbs_Android.jar)右键,选择Add As Library…,如图:
? ? ? ?

Androidstudio4.png


? ? ? ?此时会发现在app目录的build.gradle的dependencies块中生成了工程所依赖的jar文件的对应说明,如下所示:
? ? ? ?

Androidstudio5.png


?

显示地图

百度地图SDK为开发者提供了便捷的使用百度地图能力的接口,通过以下几步操作,即可在您的应用中使用百度地图:

1第一步 配置AndroidManifest.xml文件

1.在<application>中加入如下代码配置开发密钥(AK):

<application> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="开发者 key" /> </application>

密钥AK是第一步得到的

2. 在<application/>外部添加如下权限声明:

 
<!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 --> 
<uses-permission android:name="android.permission.INTERNET" /> 
<!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 --> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<!-- 读取外置存储。如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<!-- 写外置存储。如果开发者使用了离线地图,并且数据写在外置存储区域,则需要申请该权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

注:自Android6.0起部分权限的使用需要开发者在代码中动态申请。

2第二步 在布局文件中添加地图容器

MapView是View的一个子类,用于在Android View中放置地图。MapView的使用方法与Android提供的其他View一样。

<com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" />

3第三步 地图初始化

注意:在SDK各功能组件使用之前都需要调用“SDKInitializer.initialize(getApplicationContext())”,因此建议在应用创建时初始化SDK引用的Context为全局变量。

新建一个自定义的Application,在其onCreate方法中完成SDK的初始化。示例代码如下:

public class DemoApplication extends Application

{

@Override public void onCreate()

{

super.onCreate();

//在使用SDK各组件之前初始化context信息,传入

ApplicationContext SDKInitializer.initialize(this);

//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.

//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。 SDKInitializer.setCoordType(CoordType.BD09LL);

}

}

在AndroidManifest.xml文件中声明该Application

config.png

4创建地图Activity,管理MapView生命周期

注意:在项目中使用地图的时候要特别注意合理地管理地图生命周期,这非常重要。

以下示例代码简述对地图生命周期

public class MainActivity extends Activity { ?
? ? private MapView mMapView = null; ?
? ? @Override ?
? ? protected void onCreate(Bundle savedInstanceState) { ?
? ? ? ? super.onCreate(savedInstanceState); ? ?
? ? ? ? setContentView(R.layout.activity_main); ?
? ? ? ? //获取地图控件引用 ?
? ? ? ? mMapView = (MapView) findViewById(R.id.bmapView); ?
? ? } ?
? ? @Override ?
? ? protected void onResume() { ?
? ? ? ?super.onResume(); ?
? ? ? ?//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 ?
? ? ? ?mMapView.onResume(); ?
? ? } ?
? ? @Override ?
? ? protected void onPause() { ?
? ? ? super.onPause(); ?
? ? ? //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 ?
? ? ? mMapView.onPause(); ?
? ? }?
? ? @Override ?
? ? protected void onDestroy() { ?
? ? ? super.onDestroy(); ?
? ? ? //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 ?
? ? ? mMapView.onDestroy(); ?
? ? } ?
}

显示定位

坐标系说明

Android定位SDK产品,支持全球定位,能够精准的获取经纬度信息。根据开发者的设置,在国内获得的坐标系类型可以是:国测局坐标、百度墨卡托坐标 和 百度经纬度坐标。在海外地区,只能获得WGS84坐标。请开发者在使用过程中注意坐标选择。定位SDK默认输出GCJ02坐标,地图SDK默认输出BD09ll坐标。

显示定位

配置AndroidManifest.xml文件

1.加入如下权限使用声明

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 这个权限用于进行网络定位 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 这个权限用于访问GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 这个权限用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!-- 这个权限用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!-- 访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET"></uses-permission>

在Application标签中声明定位的service组件

<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"/>

4构造地图数据

我们通过继承抽象类BDAbstractListener并重写其onReceieveLocation方法来获取定位数据,并将其传给MapView。

public class MyLocationListener extends BDAbstractLocationListener {
    @Override
    public void onReceiveLocation(BDLocation location) {
        //mapView 销毁后不在处理新接收的位置
        if (location == null || mMapView == null){
            return;
        }
        LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
        MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(latLng);
        MyLocationData locationData = new MyLocationData.Builder().latitude(latLng.latitude).longitude(latLng.longitude).build();
        baiduMap.animateMapStatus(update);
        baiduMap.setMyLocationData(locationData);       // 地图上显示定位点
        isFirstLocation = false;
    }
}

5通过LocationClient发起定位

private void initLocationOption() {
    MyLocationListener myLocationListener = new MyLocationListener();
    mLocationClient = new LocationClient(getApplicationContext());
    mLocationClient.registerLocationListener(myLocationListener);
    SDKInitializer.initialize(getApplicationContext());
    setContentView(R.layout.activity_main);

    mMapView = findViewById(R.id.bmapView);
    baiduMap = mMapView.getMap();
    baiduMap.setMyLocationEnabled(true);

    LocationClientOption option = new LocationClientOption();
    option.setScanSpan(1000);//每一秒发送一次
    option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
    option.setIsNeedAddress(true);
    mLocationClient.setLocOption(option);
    mLocationClient.start();//启动位置请求
}

最后由于安卓虚拟机无法正确定位,所以用手机连接到安卓中得到百度地图的定位

?附上源代码链接

等风来1536/cq1

?

?

??

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:33:24  更:2021-12-04 13:35:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:56:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码