经纬度持续变化,数据来源GPS,解决经纬度出现4.9E-324的问题

  • 全部代码
  • 实验效果及更改说明
  • 本项目遇到的问题(经纬度出现4.9E-324)及解决方法
  • 《第一行代码》书籍分享如下:
    • 一点解释
  • 心路历程

全部代码

MainActivity.java

package com.example;import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapView;import java.util.ArrayList;
import java.util.List;import static com.baidu.lbsapi.auth.LBSAuthManager.VERSION;public class MainActivity extends AppCompatActivity {private MapView mapView;private TextView positionText;public LocationClient mLocationClient;private BaiduMap baiduMap;private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mLocationClient = new LocationClient(getApplicationContext());Log.i(TAG, "onReceiveLocation: LocationListener 1 print!!!");//程序运行到了这里   ·1mLocationClient.registerLocationListener(new MyLocationListener());//监听回调Log.i(TAG, "onReceiveLocation: LocationListener 2 print!!!");//程序运行到了这里   ·1setContentView(R.layout.activity_main);positionText = (TextView) findViewById(R.id.position_text_view);Log.i(TAG, "onReceiveLocation: onCreate print!!!");//程序运行到了这里   ·1//将三种请求权限先放至list在放入StringList<String> permissionList = new ArrayList<>();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 {Log.i(TAG, "onReceiveLocation: permissionRquest print!!!");//程序运行到了这里  ·2requestLocation();//当权限全部被同意之后才会开始地理位置的定位}}private void requestLocation() {initLocation();mLocationClient.start();//结果会回调到之前的监听器当中即MyLocationListener,start的工作原理是什么,什么时候开始start?Log.i(TAG, "onReceiveLocation: mLocationClient print!!!");//程序运行到了这里  ·4}private void initLocation() {LocationClientOption option = new LocationClientOption();option.setCoorType("bd09ll");//默认值是gcj02,中国坐标偏移标准,google map,高德、腾讯使用option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);//设置传感器类型,其实也就是GPS定位option.setOpenGps(true); // 允许gps定位option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
//        option.setLocationNotify(true);//可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果option.setScanSpan(1000);//每8秒更新位置mLocationClient.setLocOption(option);Log.i(TAG, "onReceiveLocation: initLocation print!!!");//程序运行到了这里   ·3}@Overrideprotected void onDestroy() {Log.i(TAG, "onReceiveLocation: onDestroy print!!!");super.onDestroy();mLocationClient.stop();}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, 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 location) {Log.i(TAG, "onReceiveLocation: MyLocationListener print!!!");StringBuilder currentPosition = new StringBuilder();currentPosition.append("经度:").append(location.getLongitude()).append("\n");currentPosition.append("纬度:").append(location.getLatitude()).append("\n");currentPosition.append("国家:").append(location.getCountry()).append("\n");currentPosition.append("省份:").append(location.getProvince()).append("\n");currentPosition.append("市:").append(location.getCity()).append("\n");currentPosition.append("区:").append(location.getDistrict()).append("\n");currentPosition.append("街道:").append(location.getStreet()).append("\n");currentPosition.append("定位方式:");if(location.getLocType() == BDLocation.TypeGpsLocation){currentPosition.append("GPS");}else if(location.getLocType() == BDLocation.TypeNetWorkLocation){currentPosition.append("NetWork");}positionText.setText(currentPosition);}}
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example"><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><uses-permission android:name="android.permission.WAKE_LOCK" /><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"><meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="GwZepuD4owFzGnoAsuAkj1bpt4NFPSWw" /><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><serviceandroid:name="com.baidu.location.f"android:enabled="true"android:process=":remote"></service></application></manifest>

activity_main.xml

<?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"><TextViewandroid:id="@+id/position_text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

实验效果及更改说明

  • 没传视频到这,口述效果
  • 定位方式为GPS:手机正中间的经纬度会随着你的移动,每秒都会发生变化(前提是你没有连接网络,并且你在室外,如果你在室内的话,是无法看到经纬度变化的,甚至打开软件发现啥都没有,这就是你在室内,gps信号进不来。)
  • 定位方式为NetWork:你已连接网络并且现在的定位方式是网络定位,经实测,网络定位不够及时,比较慢,个人推测可能跟你手机的网速有关系,如果手机被限速的话,可能影响会比较大。
  • 如何更改手机的定位方式:
    在MainActivity当中,方法initLocation()当中, option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);//设置传感器类型,其实也就是GPS定位
    该行代码指定 定位方式为gps,优先选择gps,如果你已连接网络,那么在没有gps信号的时候会采取NetWork的定位方式,需要注意。如果自己不想使用NetWork的定位方式,让手机保持无网络的状态并且身处室外即可达到实验效果。

本项目遇到的问题(经纬度出现4.9E-324)及解决方法

我在改bug时,在网络搜索这个问题,会出现很多种可能,可能的错误原因如下几种:

  • 情况一: libs里面缺少armeabi-v7a文件夹
  • 情况二:网络不好,联网失败之类的,导致了定位没有成功,换到环境开阔的地方问题解决。
  • 情况三:定位需要的一些权限没有配齐,在manifest清淡文件中补齐后问题解决。
  • 情况四:key不对,开发的时候用的key是发布的key,导致了这个错误,将key换过来后问题解决。
  • 以上情况参考以下CSDN:
    点击即可

这里要讲的是另外一种可能情况如下

  • 问题介绍:
    我找了很多种情况,结果都不符合自己的情况,然后我又去运行了一下自己的百度地图引入的代码,发现出错,并提示错误代码
    error code101 无法在AndroidManifest.xml中获取com.baidu.android.lbs.API_KEY的值
  • 在网上搜索后发现,是AndroidManifest.xml文件的问题,然后在API_KEY的地方我发现了问题如下:
  •     <meta-dataandroid:name="com.baidu.mapapi.API_KEY"android:value="GwZepuD4owFzGnoAsuAkj1bpt4NFPSWw"/>
    

乍一看其实没问题,但问题就在于格式错误,应该是如下:

  •     <meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="GwZepuD4owFzGnoAsuAkj1bpt4NFPSWw"/>
    

没错,就是mapapi以及lbsapi的差别。就是这样的一个问题让我纠结了很多天,总是想不清楚为什么自己的经纬度刚开始可以定位准确后来就出差错了,我反复与《第一行代码》当中的代码作对比,没找出来错误,没有想到问题居然发生在了这个不起眼的小地方。

当然,还有的错误情况 把KEY写成了Key,等等诸如此类的小失误都会导致你的经纬度返回4.9E-324

  • 那为什么经纬度返回的都是4.9E-324而不是别的值呢,因为百度地图官方将经纬度的初始值默认为这个,当你的so出错时,当你的经纬度无法回调时,当你无法获取到正确的经纬度的时候都会返回这个值,所以,要根据自己的实际情况,根据你的log当中的error的代码去查看自己是那种错误然后对症下药,才可以解决自己的病症。

《第一行代码》书籍分享如下:

链接:https://pan.baidu.com/s/1Ewor7EiRaWZzj-IFuC3TgA
提取码:thrk
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V4的分享

一点解释

本文的代码是照搬这本书籍的,个人经过学习之后觉得对于Android Studio的开发人员来讲,这是一本疯狂讲义对于Java一般重要性的书籍,墙裂推荐大家系统地学习此书再来开发。

心路历程

  • 为了准备4.20的中期答辩,我着急赶进度,却没有停下脚步来修改自己曾经在这里遇到的问题,导致即使我能够将百度地图引入,能够显示自己的图标,但总是无法在地图上显示图标的变化,毕设陷入死水,没有一点动静儿,自己心里干着急。
  • 开发及比赛经验极少的我,在大学时光面对老师所布置的开发大作业任务的时候总是习惯性的躲在组长身后,让组长一个人带飞,但自己实际上什么也没学,这件事情一直是我的一个遗憾,虽然身为计算机专业的学生但是却一点不懂计算机专业的知识,比如数据结构,比如算法。
  • 在面对毕业设计时,我能明显的感到自己的底气不足,你想啊,同届的同学们这四年打了多少比赛,做了多少项目啊,他们积攒了那么多的经验,现在来准备这个毕业设计岂不是如鱼得水,我怎么能够跟他们比速度和质量么,诸如此类的想法困扰了我许久,一度有点怀疑自己当初做的决定是否有点傻,早知道这样我当初是不是应该像别的同学一样买一个毕业设计不用自己花时间和精力?
  • 在去年考研的时候,我也没有好好学,基础很弱,到了12月份,虽然没有像刘晓艳老师之前在中北讲座所说的生不如死那么夸张,但我知道,我看似非常平静的神态下一直隐藏着自己的自卑与胆小。但即使考研全败,我仍然做到了早上起来占座,我也做到了即使题目不会就算是坐着我在考场坚定地坐到考试结束。因为,我从来都不是一个放弃的人,学习习惯不好是我的问题,大学没在专业能力下功夫也是自己选择错误,不知道专业能力对于一个大学生而言的重要性。但我从来都不会逃避,我会咬着牙直面即将到来的任何风雨。
  • 把自己的心态稳下来之后,我开始思考,为什么别人就可以有思路把bug解决掉,或者说他们怎么就知道如何去开发一个程序呢,都是爹妈生的,难道他们多个脑子?想到这里,我开始在网上搜索编码之前应该知晓的基础知识。例如,想要开发一个程序,应该分哪些步骤去进行?当你遇到一个bug,应该如何搜索,如何描述bug?如何用自己的方法把这个问题进行切割划分成几个小问题然后逐个击破。
  • 我坚信这个世界没有解决不了的难题,如果有,只能证明苦没下到,方法还不正确。抱着这个心态,我有重新打开了本文所讲的这个module,我开始去了解java代码的执行顺序,开始使用《第一行代码》所讲的输出logi方法查看方法是否被调用,以及调用的顺序。将100多行代码分块检查,最终全部检查之后,虽然没有直接找到问题,但是自己对代码的熟悉度得到了一个极大的提升。
  • 我特别赞成唐静老师曾说过的一句话,“没步路都算数”。虽然觉得自己有点无头苍蝇的感觉,但始终坚持下来,终于在百度地图的那个项目我找到了错误原来是lbsapi,我写成了mapapi,更改之后,一切问题迎刃而解。但最重要的是,我对代码的熟悉度有一个质的飞跃并且因为这次经历,给自己积攒了一定的代码经验,知道了该如何去描述bug,如何寻找bug出现的位置,以及如何尝试解决bug。
  • 编写代码是有难度的,但同时也是具有魅力的,看着生硬的字母在电脑的成功运行下呈现诸多不一样的效果,有点酒不醉人人自醉的韵味。
  • 代码还在继续,故事也未结束,期待毕设完工的那天!
  • 这次的项目分享到这里就结束了,如果对您有帮助不妨点个赞谢谢!

实时获取经纬度信息(使用GPS),经纬度持续变化相关推荐

  1. 百度地图显示服务器地址,百度地图_根据地图上标记位置获取街道信息,以及经纬度信息...

    百度地图Demo var map = new BMap.Map("container");//初始化地图 map.addControl(new BMap.NavigationCon ...

  2. 提取Exif信息中GPS经纬度,转化为double方法

    首先大致说下exif信息.感谢百度百科君~ Exif是一种图象文件格式,它的数据存储与JPEG格式是完全相同的.实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈.快门.白 ...

  3. java gps经纬度坐标转高德坐标_高德经纬度转普通GPS经纬度

    # 官方API: http://lbs.amap.com/api/webservice/guide/api/convert # 坐标体系说明:http://lbs.amap.com/faq/top/c ...

  4. Android GPS应用:动态获取位置信息

    随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) 在上文中,介绍了GPS概念及Android开发GPS应用涉及到的常用类和方法.在本文中,开发一个小应用,实时获 ...

  5. 对Android GPS获取位置信息的新研究.

    前段时间略看了Android 的GPS API,就冒然发布了一片博文,现在再回过头来看看,确实有不少不足甚至错误.这篇算做补充和纠正吧. 1.要想获取位置信息,需要在手机设置中将"位置与安全 ...

  6. Android 获取位置信息

    本文转自:https://juejin.cn/post/6986580983134814216 Android 提供LocationManager等相关API用于获取位置信息. 一.权限申请 1.1 ...

  7. Android获取GPS网络定位经纬度信息

    定位一般分为是:GPS定位,WIFI定位,基站定位 和 AGPS定位 GPS定位 GPS定位需要手机GPS模块硬件支持.GPS走的是卫星通信的通道,在没有网络连接的情况下也能使用,并且通过GPS方式准 ...

  8. cesium实时获取卫星的动态信息,包括经纬度和名称(onTick)

    效果如图下显示,实时获取经纬度,显示到二维图上 1. 添加卫星,然后监听方法: this.viewer.dataSources.add(Cesium.CzmlDataSource.load('czml ...

  9. 不丢失精度的获取照片的Gps经纬度

    不丢失精度的获取照片的Gps经纬度 1. 实际照片存储经纬度 2. **用pyhton exifread读取** 3. 用java metadata-extractor读取 4. windows用 e ...

最新文章

  1. Pat乙级 1058 选择题
  2. ABAP 字符串操作
  3. FastMaskRCNN算法TensorFlow配置,训练
  4. httpRuntime 问题
  5. 数据可视化及数据保存
  6. IBM Bluemix计划于2017年下半年在云资源中引入英特尔3D XPoint
  7. golang 连接多个mysql_Prometheus+Grafana监控MySQL
  8. linux snap文件夹,在Linux下使用Snap安装Rambox的方法
  9. c语言结构体嵌套 初始化,求大神帮忙看看这个结构体嵌套的初始化怎么改
  10. 什么是Overlay网络?Underlay 网络 vs. Overlay网络
  11. linux opendir路径_Linux目录操作函数:opendir/readdir/closedir
  12. M-TOUCH移动端社区论坛类型的网站源码
  13. activemq学习记录(二)(使用p2p模式和使用发布订阅模式去生产以及消费数据)
  14. XYNUOJ 第四次比赛 懒省事得小名
  15. 华为eNSP模拟器中两个路由器IP互联
  16. BeagleboneBlack上u-boot的MLO文件是哪里来的
  17. java虚拟函数_java实现多态中的虚函数相关概念
  18. 【小白必看】2020 笔记本电脑选择科普
  19. 自阿里P8爆出1031道java面试题后,我在boss直聘狂拿千份Offer
  20. Vue+SpringBoot实现Excel在线预览功能(PS:添加样式比较费劲)

热门文章

  1. 2019年北京画室排名前十位(考央美比较好的画)
  2. 模拟简易的打地鼠游戏
  3. 安卓利用百度地图实现定位
  4. JavaScript:实现Convex hull凸包问题算法(附完整源码)
  5. 横河电机赢得土库曼斯坦燃气电厂控制系统和现场仪表的订单
  6. 拼多多商家一定不要踩这几个坑,坑坑致命!
  7. 印象笔记mac版 同步问题_想要多设备同步笔记?这6款云笔记软件了解一下
  8. android 语音播报中文,android 语音播报(通过手说tts 实现中文语音播报)
  9. CiteSpace关键词共现图谱含义详细解析
  10. wps 单元格跳动_WPS表格如何从首行跳到末行 WPS表格如何从首列自动跳到末列