您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

移动互联网开发技术教学网站项目研究第七篇

2021@SDUSC

定位功能实现

private LocationClient mLocationClient = null;
private MyLocationConfiguration.LocationMode locationMode;
private MyLocationConfiguration.LocationMode mLocationMode;

首次,需要进行准备工作没配置好百度地图的Android定位SDK,在官方网站上按照教程获取密钥,在AndroidManifest.xml、主工程的build.gradle文件进行配置环境工作。
然后需要在主线程中声明LocationClient类对象,该对象初始化需传入Context类型参数。例如使用getApplicationConext()方法获取全进程有效的Context。
LocationClient类是定位服务的客户端,宿主程序在客户端声明此类,并调用,目前只支持在主线程中启动。

public class MyLocationListener extends BDAbstractLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location) {
            //mapView 销毁后不在处理新接收的位置
            if (location == null || mMapView == null){
                return;
            }

           
            LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
            if (isFirstLocate) {
                isFirstLocate = false;
                
                MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
                mBaiduMap.animateMapStatus(update);
                update = MapStatusUpdateFactory.zoomTo(18f);
                mBaiduMap.animateMapStatus(update);
            }

            MyLocationData locData = new MyLocationData.Builder()
                    .accuracy(location.getRadius())
                    
                    .direction(location.getDirection()).latitude(location.getLatitude())
                    .longitude(location.getLongitude()).build();
            mBaiduMap.setMyLocationData(locData);
        }
    }

Abstract类型的监听接口BDAbstractLocationListener,用于实现定位监听,该接口会异步获取定位结果。onReceiveLocation(BDLocation location)是定位请求回调函数。此处的BDLocation类为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果。
LatLng类是地理坐标基本数据结构,location.getLatitude()获取纬度坐标,location.getLongitude()获取经度坐标。
作者设置了一个变量判断用户是否第一次定位,如果是先将isFirstLocate状态改为false,第一次执行后其余都不再是第一次, 然后设置地图的一些显示状态,如显示时以什么位置为中心,还有用户显示的缩放地图是以多少为基准。MapStatusUpdate类是描述地图状态将要发生的变化。 MapStatusUpdateFactory用于生成地图状态将要发生的变化。MapStatusUpdateFactory.newLatLng(ll);是将当前获取得定位设置为地图的新中心点。mBaiduMap.animateMapStatus(update);可以以动画方式更新刚刚定义的地图变化状态,即将地图改变为以用户当前定位为中心显示,默认动画耗时300ms。后面设置地图缩放级别,利用地图状态工厂类的方法zoomTo(18f),将update变量由设定中心位置改为按照方法给定数值18f设置地图缩放级别,然后再次更新地图mBaiduMap状态。
无论是否第一次定位都将执行的操作如下。MyLocationData是定位数据类,它可以包含定位精度(accuracy)、GPS定位时方向角度(direction)、百度纬度坐标(latitude)、百度经度坐标(longitude)、GPS定位时卫星数目(satellitesNum)和GPS定位时速度信息(speed)。MyLocationData.Builder是定位数据建造器,是MyLocationData的嵌套类,通过方法build()可以为它构建生成定位数据对象。location.getRadius()是获取当前定位的精度,默认值为0.0f。location.getDirection()是获取GPS定位结果时,行进的方向,单位为度。这一句代码作者根据当前定位的精度通过定位数据建造器为新建的定位数据对象建造属性定位精度(accuracy)、GPS定位时方向角度(direction)、百度纬度坐标(latitude)、百度经度坐标(longitude)。最后setMyLocationData(locData)
设置上述定义好的定位数据对象,该方法只有先允许定位图层后设置数据才会生效。

按钮监听器

public void onClick(View v){
        if(v.getId() == R.id.btn_library){
            mIntent = new Intent(MainActivity.this, DescriptionActivity.class);
            //使用Bundle来传递Int类型的数据
            Bundle bundle = new Bundle();
            bundle.putInt("name", library_info.getName());
            bundle.putInt("des",library_info.getDescreption());
            bundle.putInt("picname", library_info.getPicname());
            mIntent.putExtras(bundle);
            startActivity(mIntent);
        }else if(v.getId() == R.id.btn_tech){
            mIntent = new Intent(MainActivity.this, DescriptionActivity.class);
            Bundle bundle = new Bundle();
            bundle.putInt("name", tech_info.getName());
            bundle.putInt("des",tech_info.getDescreption());
            bundle.putInt("picname", tech_info.getPicname());
            mIntent.putExtras(bundle);
            startActivity(mIntent);
        }else if(v.getId() == R.id.btn_dining){
            mIntent = new Intent(MainActivity.this, DescriptionActivity.class);
            Bundle bundle = new Bundle();
            bundle.putInt("name", dining_info.getName());
            bundle.putInt("des",dining_info.getDescreption());
            bundle.putInt("picname", dining_info.getPicname());
            mIntent.putExtras(bundle);
            startActivity(mIntent);
        }

    }

分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进