ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

安卓百度地图sdk

2021-12-04 19:30:46  阅读:203  来源: 互联网

标签:定位 百度 option mBaiduMap 安卓 location new mMapView sdk


安卓百度sdk定位

步骤一:百度地图开发者注册,并获取到key

获取SHA1时要在Android Studio中的终端使用命令keytool -list -v -keystore “C:\Users\administrator 2.android\debug.keystore” -alias androiddebugkey

这里双引号里的内容是自己电脑上.android\debug.keystore文件的路径,使用时要根据自己电脑上的用户名进行修改。

在这里插入图片描述

步骤二:下载jar包并配置as

在这里插入图片描述
导入jar包后add as library
然后在manifest中配置
在这里插入图片描述

添加定位权限

使用定位SDK,需在AndroidManifest.xml文件中Application标签中声明service组件,每个App拥有自己单独的定位service,代码如下:

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

除添加service组件外,使用定位SDK还需在AndroidManifest.xml文件中添加如下权限:

<!-- 这个权限用于进行网络定位-->
<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>

步骤三

编写代码

public class MainActivity extends Activity {
    private MapView mMapView = null;
    private BaiduMap mBaiduMap;
    private LocationClient mLocationClient;
    private boolean ifFirst = true; 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mMapView = findViewById(R.id.bmapView);
        mBaiduMap = mMapView.getMap();
        mLocationClient = new LocationClient(this);
 
        // 注册LocationListener监听器
        MyLocationListener myLocationListener = new MyLocationListener();
        mLocationClient.registerLocationListener(myLocationListener);
 
        
        mBaiduMap.setMyLocationEnabled(true);
 
        LocationClientOption option = new LocationClientOption()
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        option.setOpenGps(true); // 打开gps
        option.setCoorType("bd09ll"); // 设置坐标类型
        option.setScanSpan(1000);
 
        option.setIsNeedAddress(true);
 
        // 设置locationClientOption
        mLocationClient.setLocOption(option);
 
        // 开启地图定位图层
        mLocationClient.start();*/
    }
 
    @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() {
        mLocationClient.stop();
        mBaiduMap.setMyLocationEnabled(false);
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.onDestroy();
        mMapView = null;
        super.onDestroy();
    }
 
    //通过继承抽象类BDAbstractListener并重写其onReceieveLocation方法来获取定位数据,并将其传给MapView
    public class MyLocationListener extends BDAbstractLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location) {
            //mapView 销毁后不在处理新接收的位置
            if (location == null || mMapView == null) {
                return;
            }
            MyLocationData locData = new MyLocationData.Builder()
                    .accuracy(location.getRadius())
                    // 此处设置开发者获取到的方向信息,顺时针0-360
                    .latitude(location.getLatitude())
                    .latitude(30.58385)    // 纬度
                    .longitude(location.getLongitude())
                    .longitude(114.33669)  // 经度
                    .direction(location.getDirection())
                    .build();
            mBaiduMap.setMyLocationData(locData);
 
            // 通过MyLocationConfiguration类来构造
            // 包括定位的属性,定位模式、是否开启方向、设置自定义定位图标、精度圈填充颜色以及精度圈边框颜色5个属性。
            // 参数介绍:
            // 1.定位模式 地图SDK支持三种定位模式:NORMAL(普通态), FOLLOWING(跟随态), COMPASS(罗盘态)
            // 2.是否开启方向
            // 3.自定义定位图标 支持自定义定位图标样式,替换定位icon
            // 4.自定义精度圈填充颜色
            // 5.自定义精度圈边框颜色
            MyLocationConfiguration configuration = new MyLocationConfiguration(
                    MyLocationConfiguration.LocationMode.COMPASS,
                    false,
                    null,
                    0xAAFFFF88,
                    0xAA00FF00);
            // 在定义了以上属性之后,通过如下方法来设置生效:
            mBaiduMap.setMyLocationConfiguration(configuration);
 
            if (ifFirst) {
                LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
                MapStatus.Builder builder = new MapStatus.Builder();
                builder.target(ll);
                builder.zoom(20.0f);    // 放大为20层级
                mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
                //放大层级
                ifFirst = false;
            }
 
        }
    }
 
}

上述代码参考官方文档

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);
    }
}

最后是activity_main文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <com.baidu.mapapi.map.MapView
        android:id="@+id/bmapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true" />
</androidx.constraintlayout.widget.ConstraintLayout>

在这里插入图片描述
结果图展示

小结

学习安卓调用百度地图sdk的使用,与定位功能的使用

代码仓库

标签:定位,百度,option,mBaiduMap,安卓,location,new,mMapView,sdk
来源: https://blog.csdn.net/weixin_53460643/article/details/121720069

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有