Android最全Android百度地图——定位SDK(版本v3,一线互联网大厂面试真题系统收录

最后

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。

最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【算法合集】

【延伸Android必备知识点】

【Android部分高级架构视频学习资源】

Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

二、搭建环境:

1、将liblocSDK3.so文件拷贝到libs/armeabi目录下,将locSDK3.1.jar文件拷贝到libs目录下,并将locSDK3.1.jar导入到工程中。如下图:

2、修改AndroidManifest.xml文件:

a. 在application标签中声明service组件


        <service

            android:enabled="true"

            android:name="com.baidu.location.f"

            android:process=":remote" />

b. 声明所需权限


    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

    <uses-permission android:name="android.permission.READ_LOGS" />

三、具体实现:

1、构建LocationClient类的对象,设置定位参数,并注册实现了BDLocationListener接口的类的对象为监听器。


        mLocationClient = new LocationClient(this.getApplicationContext());

        

        mBDLocationListener = new MyBDLocationListener();

        mLocationClient.registerLocationListener(mBDLocationListener);

        

        LocationClientOption option = new LocationClientOption();

       

        // 需要地址信息,设置为其他任何值(string类型,且不能为null)时,都表示无地址信息。

        option.setAddrType("all");

        // 设置是否返回POI的电话和地址等详细信息。默认值为false,即不返回POI的电话和地址信息。 

        option.setPoiExtraInfo(true);

        

        // 设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。 

        option.setProdName("定位我当前的位置");

        

        // 打开GPS,使用gps前提是用户硬件打开gps。默认是不打开gps的。 

        option.setOpenGps(false);

        

        // 定位的时间间隔,单位:ms

        // 当所设的整数值大于等于1000(ms)时,定位SDK内部使用定时定位模式。

        // option.setScanSpan(1000);

        

        // 查询范围,默认值为500,即以当前定位位置为中心的半径大小。

        option.setPoiDistance(500);

        // 禁用启用缓存定位数据

        option.disableCache(true);

        

        // 坐标系类型,百度手机地图对外接口中的坐标系默认是bd09ll

        option.setCoorType("bd09ll");

        

        // 设置最多可返回的POI个数,默认值为3。由于POI查询比较耗费流量,设置最多返回的POI个数,以便节省流量。

        option.setPoiNumber(3);

        

        // 设置定位方式的优先级。

        // 即使有GPS,而且可用,也仍旧会发起网络请求。这个选项适合对精确坐标不是特别敏感,但是希望得到位置描述的用户。

        option.setPriority(LocationClientOption.NetWorkFirst);

        

        mLocationClient.setLocOption(option);

2、发起请求:


 // 发起定位请求

        findViewById(R.id.btn_request).setOnClickListener(new View.OnClickListener() {

			

			@Override

			public void onClick(View v) {

				 mLocationClient.start();

			}

		});

        

        // 发起重新定位

         findViewById(R.id.btn_location).setOnClickListener(new View.OnClickListener() {

			

			@Override

			public void onClick(View v) {

				if (mLocationClient != null && mLocationClient.isStarted()){

				    mLocationClient.requestLocation();

				}

			}

		});

        

         // 发起查询请求

         findViewById(R.id.btn_address).setOnClickListener(new View.OnClickListener() {

 			

 			@Override

 			public void onClick(View v) {

 				if (mLocationClient != null && mLocationClient.isStarted()){

 				   mLocationClient.requestPoi();

 				}

 			}

 		}); 

3、 编写BDLocationListener接口的实现类,接收异步返回的定位结果和异步返回的POI查询结果。


 final class MyBDLocationListener implements BDLocationListener{



		@Override

		public void onReceiveLocation(BDLocation location) {

			Log.e(TAG, "---------onReceiveLocation()---------");

			

			if(location == null){

				Log.e(TAG, "---------onReceiveLocation------location is NULL----");

				return;

			}

			

			int type = location.getLocType();

			Log.i(TAG, "当前定位采用的类型是:type = " + type);

			

			String coorType = location.getCoorType();

			Log.i(TAG, "坐标系类型:coorType = " + coorType);

			

			   // 判断是否有定位精度半径

            if(location.hasRadius()){

            	// 获取定位精度半径,单位是米

            	float accuracy = location.getRadius();

            	Log.i(TAG, "accuracy = " + accuracy);

            }

			

            if(location.hasAddr()){

				// 获取反地理编码。 只有使用网络定位的情况下,才能获取当前位置的反地理编码描述。

				String address = location.getAddrStr();

				Log.i(TAG, "address = " + address);

			}

            

            String province = location.getProvince();  // 获取省份信息

            String city = location.getCity();  // 获取城市信息

            String district = location.getDistrict(); // 获取区县信息

            

            Log.i(TAG, "province = " + province);

            Log.i(TAG, "city = " + city);

            Log.i(TAG, "district = " + district);

            

            double latitude = location.getLatitude();

            double longitude = location.getLongitude();

            Log.i(TAG, "latitude = " + latitude);

            Log.i(TAG, "longitude = " + longitude);

			

		}



		@Override

		public void onReceivePoi(BDLocation poiLocation) {

			

			Log.e(TAG, "---------onReceivePoi()---------");

			

			if(poiLocation == null){

				Log.e(TAG, "---------onReceivePoi------location is NULL----");

				return;

			}

			

			if(poiLocation.hasPoi()){

				String poiStr = poiLocation.getPoi();

				Log.i(TAG, "poiStr = " + poiStr);

				

			}

			

			if(poiLocation.hasAddr()){

				// 获取反地理编码。 只有使用网络定位的情况下,才能获取当前位置的反地理编码描述。

				String address = poiLocation.getAddrStr();

				Log.i(TAG, "address = " + address);

			}

		}

    }

4、定位结束后停止服务:


if(mLocationClient != null && mLocationClient.isStarted()){

    		if(mBDLocationListener != null){

        		mLocationClient.unRegisterLocationListener(mBDLocationListener);

        	}

    		

        	mLocationClient.stop();

        	mLocationClient = null;

    	}

四、运行效果图:

1、在3G/2G网络环境下:

点击第一个按钮,Logcat打印的日志如下:

点击第二个按钮,Logcat打印的日志如下:

点击第二个按钮,Logcat打印的日志如下:

点击第三个按钮,Logcat打印的日志如下:

点击第三个按钮,Logcat打印的日志如下:

点击第三个按钮,Logcat打印的日志如下:

2、在wifi环境下:

点击第二个按钮,Logcat打印的日志如下:

点击第三个按钮,Logcat打印的日志如下:

注:我是在房子里面,也就是说:只能用WIFI或者3G/2G网络粗略的确定我当前的位置信息。我用3G/2G网络和WIFI都测过了,每次间隔要大于1秒。

通过上面的Logcat打印出的结果,我们大致可以得出这样的结论:在WIFI或者3G/2G网络只能粗略的确定我当前的位置信息。可能会差很大,也就是说不靠谱。

大家可以自己测测看,呵呵。

完整代码:


package com.android.baidu.map;



import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;



import com.baidu.location.BDLocation;

import com.baidu.location.BDLocationListener;

import com.baidu.location.LocationClient;

import com.baidu.location.LocationClientOption;



/**

 * 获取我当前的位置信息。

 * 对精确坐标不是特别敏感,但是希望得到位置描述。

 * @author android_ls

 *

 */

public class BaiduMapLoactionActivity extends Activity {

   

	private static final String TAG = "BaiduMapLoactionActivity";



#### 最后笔者收集整理了一份Flutter高级入门进阶资料PDF

以下是资料目录和内容部分截图

> ![](https://img-blog.csdnimg.cn/img_convert/f8fcbb09e017f0196b317cf42dccd640.webp?x-oss-process=image/format,png)
> ![](https://img-blog.csdnimg.cn/img_convert/ba4499f3dcd6680c76d2ce2e8a2c75d2.webp?x-oss-process=image/format,png)
> 里面包括详细的知识点讲解分析,带你一个星期入门Flutter。还有130个进阶学习项目实战视频教程,让你秒变大前端。



> ![](https://img-blog.csdnimg.cn/img_convert/144a93e24ab48730baaed0132b927328.webp?x-oss-process=image/format,png)



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

 {

   

	private static final String TAG = "BaiduMapLoactionActivity";



#### 最后笔者收集整理了一份Flutter高级入门进阶资料PDF

以下是资料目录和内容部分截图

> [外链图片转存中...(img-HtUOaYrh-1715190799129)]
> [外链图片转存中...(img-0iZDdzP8-1715190799130)]
> 里面包括详细的知识点讲解分析,带你一个星期入门Flutter。还有130个进阶学习项目实战视频教程,让你秒变大前端。



> [外链图片转存中...(img-DOkeuhwX-1715190799130)]



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值