安卓之实现位置定位

首先需要百度地图提供的SDK,在这里我就不介绍如何申请了,我在上一篇文章介绍了,在这里我就不多说了。
接下来我们要实现精确的定位。话不多说直接上案例:
先把百度地图提供的jar复制到如下所示:

首先创建一个安卓项目在这里我就不介绍如何创建了。
在xml中编写如下代码:

<LinearLayout 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.MapViewandroid:id="@+id/bmapView"android:layout_width="match_parent"android:layout_height="match_parent"android:clickable="true"/></LinearLayout>

主要是编写一个地图视图。
在java中编写如下代码:


public class MainActivity extends AppCompatActivity {private LocationClient locationClient;定位服务的客户端。宿主程序在客户端声明此类,并调用private MapView mapView;private BaiduMap baiduMap;private boolean isFirstLocate=true;//判断是否是第一次定位@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);                       //LocationClient定位服务的客户端。宿主程序在客户端声明此类,并调用locationClient=new LocationClient(getApplicationContext());//调用getApplicationContext()方法来调用一个全局的Context参数并传入locationClient.registerLocationListener(new MyLocationListener());SDKInitializer.initialize(getApplicationContext());//初始化地图SDK,必须在 setContentView(R.layout.activity_main)之上setContentView(R.layout.activity_main);mapView=(MapView)findViewById(R.id.bmapView); // 地图初始化baiduMap=mapView.getMap(); // 开启定位图层baiduMap.setMyLocationEnabled(true);//本人理解是否定位当前位置/******下面主要是判断权限问题********/List<String> permissionList=new ArrayList<>();//创建空的List集合//依次判断下面3个权限有没有被授权,如果没有被授权就添加到List集合中,最后将Lisr转换成数组//再调用  ActivityCompat.requestPermissions()方法一次性申请if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);}if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_PHONE_STATE)!=PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.READ_PHONE_STATE);}if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);}if (!permissionList.isEmpty()){String[] permissions=permissionList.toArray(new String[permissionList.size()]);ActivityCompat.requestPermissions(MainActivity.this,permissions,1);}else {requestLocation();}}private void requestLocation() {locationClient.start();//开始定位,定位的结果会回调到我们前面注册的监听器中MyLocationListener//LocationClient的start()方法只会定位一次initLocation();}private void initLocation() {LocationClientOption option=new LocationClientOption();// LocationClientOption主要意思是选择定位服务模式的类型option.setScanSpan(4000);//设置更新的间隔 多长时间进行一次请求option.setIsNeedAddress(true);//是否获取当前详细的地址信息//option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//这个是设置定位模式为高精度模式//locationClient.setLocOption(option);// 使用设置}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {switch (requestCode){case 1:if (grantResults.length>0){for (int result:grantResults){if (result!=PackageManager.PERMISSION_GRANTED){Toast.makeText(this,"必须同意所有权限才能使用本程序",Toast.LENGTH_SHORT).show();finish();return;}}requestLocation();}else {Toast.makeText(this,"发生未知错误",Toast.LENGTH_SHORT).show();finish();}break;default:}}public class MyLocationListener implements BDLocationListener{@Overridepublic void onReceiveLocation(BDLocation bdLocation) {//本人感觉BDLocation封装了许多,比如获取经纬度,地区等if (bdLocation.getLocType()==BDLocation.TypeNetWorkLocation||bdLocation.getLocType()==BDLocation.TypeGpsLocation){navigateTo(bdLocation);}}}private void navigateTo(BDLocation bdLocation) {if (isFirstLocate){//LatLng是存储经纬度坐标值的类,单位角度。LatLng latLng=new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude());//使用传入的经纬度构造LatLng 对象,一对经纬度值代表地球上一个地点//定义MapStatusUpdate对象,以便描述地图状态将要发生的变化//MapStatusUpdateFactory生成地图状态将要发生的变化//newLatLng设置地图新中心点MapStatusUpdate update= MapStatusUpdateFactory.newLatLng(latLng);baiduMap.animateMapStatus(update);//把update传入animateMapStatus()方法中,就可以将地图移动到指定的经纬度上update=MapStatusUpdateFactory.zoomTo(16f);//设置缩放级别baiduMap.animateMapStatus(update);isFirstLocate=false;}// MyLocationData.Builder这个类是用来封装设备当前所在位置MyLocationData.Builder builder=new MyLocationData.Builder();builder.latitude(bdLocation.getLatitude());builder.longitude(bdLocation.getLongitude());MyLocationData locationData=builder.build();//.build()方法会生成一个 MyLocationData的实例//然后在将这个实例传入 baiduMap.setMyLocationData()方法中,就可以让设备当前的位置显示在地图上了baiduMap.setMyLocationData(locationData);}@Overrideprotected void onResume() {super.onResume();mapView.onResume();}@Overrideprotected void onPause() {super.onPause();mapView.onPause();}@Overrideprotected void onDestroy() {super.onDestroy();mapView.onDestroy();locationClient.stop();//一定要停止定位,不然程序会持续在后天不停地进行定位,严重消耗手机电量baiduMap.setMyLocationEnabled(false);}}

(我已经在代码上关于不理解的我已经注释介绍了,在这里我就不介绍了)
最重要的还得在manifest.xml中设置权限问题,还有你所申请的百度密钥。
例如下面我所示:\

<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="com.example.lbstest4"><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"tools:ignore="ProtectedPermissions" /><uses-permission android:name="android.permission.READ_LOGS"tools:ignore="ProtectedPermissions" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><meta-data android:name="com.baidu.lbsapi.API_KEY"android:value="ADuRoL0gilmwrS6MnskQyWGSaaQxhwaH"/><service android:name="com.baidu.location.f" android:enabled="true"android:process=":remote"/></application></manifest>

下面是关于地图的一些要使用的类,我只是列出一部分:
类 MapStatusUpdateFactory
类 com.baidu.mapapi.map.BaiduMap
的使用
类 LocationClientOption
这只是我列出一部分,您可以自行查找。
最终的效果图如下所示:

(这个图只是我缩小的效果)
好了一个简单定位就完成了。
星光不问赶路人,时光不负有心人。你若“有心”定会闯出属于你的一片天地。

安卓之百度地图实现位置定位相关推荐

  1. Android百度地图之位置定位和附近查找代码简单实现 (上)

    很长时间没有做Android相关知识了,闲暇之余再弄了弄最新的百度地图API,主要是进行百度地图附近餐馆查找功能来练练手,同时熟悉下最新的API教程.文章比较基础,也希望对你有所帮助~参考前文:   ...

  2. 安卓之百度地图定位图层显示方式

    安卓之百度地图定位模式实现定位图层转变方式 在这里我就不细讲了,我之前的文章具体我都已经介绍了. 现在直接上代码(相当于对我前几篇文章的一个小描述). 首先需要实现和百度SDK进行连接.我上一篇已介绍 ...

  3. Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK

    原文:Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  4. [android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

           前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Intere ...

  5. [隐私安全]PC端网页版百度地图是如何定位你的真实地址的

    本文转载自https://blog.catscarlet.com/201612122637.html 注:本文适用于网页版百度地图,同样适用于阿里的高德地图,以及搜狗地图等. PC端打开网页版百度地图 ...

  6. 基于百度地图实现Android定位功能实现

    基于百度地图实现Android定位功能实现 初始化 一>获取SHA1 二>Android studio 配置 (1)下载百度地图sdk (2)解压安装包 (3)回到刚刚配置的jar包,右击 ...

  7. android百度导航实现,Android 集成百度地图实现设备定位

    Android 集成百度地图实现设备定位 步骤1: 申请android 端SDK : http://lbsyun.baidu.com/ 步骤2: 下载基础版SDK 步骤3: 下载示例程序 步骤4: 开 ...

  8. 基于百度地图实现Android定位功能实现(详解+教程)

    基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...

  9. HTML5接入百度地图并搜索定位

    首先我们得去百度那里注册一下,拥有自己的Appkey,连接:http://lbsyun.baidu.com/ 也可以使用别人的,当然最好还是自己去注册比较好. 第二步,在你自己的网页中引入: 下面直接 ...

最新文章

  1. ASP.NET MVC+Bootstrap个人博客之打造清新分页Helper(三)
  2. BI之SSAS完整实战教程3 -- 创建第一个多维数据集
  3. cmake导入so库_libgo - 协程库、并行编程库
  4. Spring+Mybatis多数据源配置(二)——databaseIdProvider的使用
  5. python vscode_VScode || 为VScode配置python环境
  6. 动手学无人驾驶(5):多传感器数据融合
  7. c语言除法加括号么,算不了除法,为什么?
  8. Python 带你来一次说走就走的环球旅行
  9. 格式化表单js插件jquery.serializeJSON
  10. 4. Linux 系统目录
  11. 3.SOA架构:服务和微服务分析及设计--- 理解服务与微服务的层次
  12. HIbernate学习笔记5 之 查询
  13. 产品经理入职四部曲—带你顺利度过试用期
  14. 在使用QueryRunner时候的异常问题Wrong number of parameters:excepted 0,was given 10 Query
  15. 关于错误local variable ‘str‘ referenced before assignment
  16. 互联网协议-简单理解和介绍
  17. 计算机科学大师唐纳德,现代计算机科学的鼻祖
  18. 二维空间内,如何判断两条线段是否相交,相离,平行,重合,并求交点
  19. 安卓按键精灵手机助手(功能:安卓版抓抓、命令库、制作电脑UI界面)
  20. wangEditor图片上传

热门文章

  1. 基于泛在电力物联网的公用配变健康状态智能诊断与综合评价研究
  2. 菜niao鸟教程C语言100题精选
  3. Java通配符-详细篇--一通百通
  4. 祭奠IT导师--张孝祥(传智播客创始人)
  5. 【数据结构与算法】Java实现七大排序算法汇总
  6. 6. 事务隔离级别之Repeatable Read
  7. Java H5支付宝付款接口_支付宝H5开放文档
  8. 收割90后,这些小程序玩出新高度
  9. java中url参数中有空格,tomcat下载文件时,URL含有文字参数与空格参数出错(java.io.FileNotFoundException错误) 解决方法(转)...
  10. Swift多线程:使用GCD实现异步下载图片