《第一行代码》第二版学习笔记(10)——基于位置的服务

发布于:2024-05-10 ⋅ 阅读:(28) ⋅ 点赞:(0)

Android Studio中没有signingReport文件,解决参考文档

一、使用百度定位

下载百度LBS开放平台的SDK

在这里插入图片描述
在项目的app.gradle文件下添加依赖:implementation fileTree(dir:'libs',includes: ['*.jar'])将libs目录下所有以.jar结尾的文件添加到当前项目的引用中。
在这里插入图片描述

在application标签内部添加一个meta-data标签,name部分是固定的,value部分填申请到的API Key,注册一个LBS SDK中的服务。

<meta-data
   android:name="com.baidu.lbsapi.API_KEY"
   android:value="XF4604XT2ckrjudssO6z1JJOcKX1J1VE"/>
<service android:name="com.baidu.location.f" android:enabled="true"
            android:process=":remote"/>

二、获取经纬度

参考博客
在这里插入图片描述
创建LocationClient实例,定位的结果会回调到注册的监听器中。

 public class MyLocationListener implements BDLocationListener {
        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            if (bdLocation.getLocType() == BDLocation.TypeGpsLocation || bdLocation.getLocType() == BDLocation.TypeNetWorkLocation){
                navigatiTo(bdLocation);
            }
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    StringBuilder currentPosition = new StringBuilder();
                    currentPosition.append("纬度:").append(bdLocation.getLatitude()).append("\n");
                    currentPosition.append("经度:").append(bdLocation.getLongitude()).append("\n");
                    currentPosition.append("国家:").append(bdLocation.getCountry()).append("\n");
                    currentPosition.append("省:").append(bdLocation.getProvince()).append("\n");
                    currentPosition.append("市:").append(bdLocation.getCity()).append("\n");
                    currentPosition.append("区:").append(bdLocation.getDistrict()).append("\n");
                    currentPosition.append("街道:").append(bdLocation.getStreet()).append("\n");
                    currentPosition.append("定位方式:");
                    if (bdLocation.getLocType() == BDLocation.TypeGpsLocation){
                        currentPosition.append("GPS");
                    }else if (bdLocation.getLocType() ==BDLocation.TypeNetWorkLocation){
                        currentPosition.append("网络");
                    }
                    positionText.setText(currentPosition);
                }
            });
        }
    }

使用百度地图

使用百度地图提供的自定义控件MapView

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

重写以下三个方法,对MapView进行管理,以保证资源能够得到及时的释放。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        SDKInitializer.setAgreePrivacy(getApplicationContext(), true);
        try {
            //在使用SDK各组件之前初始化context信息,传入ApplicationContext
            SDKInitializer.initialize(getApplicationContext());
            ...
     }

    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mLocationClient.stop();
        mapView.onDestroy();
        baiduMap.setMyLocationEnabled(false);
    }

移动到我的位置并让“我”显示在地图上

BaiduMap类是地图的总控制器,调用MapView的getMap方法就能获取BaiduMap类的实例,使用MapStatusUpdate 进行缩放。

private void navigatiTo(BDLocation location){
   if(isFirstLocate){
       LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());
       MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
       baiduMap.animateMapStatus(update);
       update = MapStatusUpdateFactory.zoomTo(16f);
       baiduMap.animateMapStatus(update);
       isFirstLocate = false;
   }
// 让“我”显示在地图上
	 MyLocationData.Builder locationBuilder = new MyLocationData.Builder();
     locationBuilder.latitude(location.getLatitude());
     locationBuilder.longitude(location.getLongitude());
     MyLocationData locationData = locationBuilder.build();
     baiduMap.setMyLocationData(locationData);
}

网站公告

今日签到

点亮在社区的每一天
去签到