首页 > 其他分享 >位置信息包

位置信息包

时间:2024-05-29 23:33:12浏览次数:11  
标签:await permission 位置 Geolocator 信息 获取

文章目录


我们在上一章回中介绍了如何实现滑动菜单相关的内容,本章回中将介绍如何获取位置信息.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

概念介绍

我们在这里说的获取位置信息本质上是获取当前手机所在位置的gps坐标,就是我们常说的经纬度。获取位置信息属于原生平台提供的功能,Flutter做为UI框架并没有
提供这种功能,因此我们需要自己编写channel,然后分别在Android和IOS平台上实现相关的代码,这样做显然又回到了原生开发中,好在Flutter提供了包机制,而
且已经有三方包替我们做了这件事情,我们只需要在项目中引入并且使用三方包就可以获取到位置信息,该包的名称为:geolocator.本章回中将详细介绍它的使用方法。

使用方法

  1. 在yaml文件中引入geolocator包,并且通过get命令获取包中的内容到项目中;
  2. 通过包中的checkPermission()方法检查是否获取到位置权限,如果没有获取到就使用requestPermission()方法获取位置权限;
  3. 使用isLocationServiceEnabled()方法检查是否已经打开位置开关,如果没有打开就使用openLocationSettings()方法打开;
  4. 使用getCurrentPosition()方法获取当前的位置信息,该信息中包含当前位置的经纬度;
    这些使用方法还有一些注意事项需要和大家说明,以免大家在使用时出现错误:- 我们在上面步骤中介绍的方法都是异步方法,需要配合async/await关键字来使用
  • 打开位置开关的方法只能用于Android,IOS不支持这样的功能;
    此外,该包还提供了监听位置开关和监听位置信息的功能,它会把位置开关状态,和位置服务封装到stream中,我们获取到相应的stream后就可以使用listen()方法
    来监听位置开关的变化和位置信息的变化。

示例代码

///获取位置开关状态,如果没有打开开关就跳转到开关设置页面(仅支持android)
locationServiceEnabled = await Geolocator.isLocationServiceEnabled();
if(!locationServiceEnabled) {
  debugPrint('location service is disabled');
  ///打开位置形状只适用于android,IOS不可以
  Geolocator.openLocationSettings();
  return Future.error('Location service is disabled');
}

///检查位置权限
permission = await Geolocator.checkPermission();
if(permission == LocationPermission.denied || permission == LocationPermission.deniedForever) {
  permission = await Geolocator.requestPermission();
  if(permission == LocationPermission.always || permission == LocationPermission.whileInUse) {
    positionResult = await Geolocator.getCurrentPosition();
  }else {
    debugPrint('Location permission is denied');
    return Future.error('Location permission is denied');
  }
}else {
  ///获取最近一次的位置信息和当前位置信息
   positionResult = await Geolocator.getLastKnownPosition();
   positionResult ??= await Geolocator.getCurrentPosition();
}

///通过stream监听位置信息
StreamSubscription<Position> serviceStatus = Geolocator.getPositionStream(
  locationSettings: locationSettings,).listen(
    (event) { debugPrint('geo updated: ${event.toString()}');},
    onDone: () => debugPrint('service updated done'),
    one rror: (error) => debugPrint('service updated error: ${error.toString()}'),
);

上面的代码中添加了注释,这样方便大家理解代码。在使用的时候最好把这些方法封装独立的方法,因为需要使用aync/await关键字。我在这里就不演示程序的运行结果
了,建议大家自己动手去实践,通过日志打印出获取到的位置信息。

体验分享

这个包的功能十分强大,除了可以提供位置信息外,还实现了位置信息的外围功能,比如检查位置权限,申请位置权限,打开位置开关。这些功能十分实用,可以极大地提
高我们的开发效率。这个包还提供了监听位置开关状态和位置信息服务的功能,监听通过stream机制实现,这个功能是我最喜欢的功能。总之,这个包的功能十分强大,
使用检验非常好,我推荐大家去亲自去检验一下。关于这个包的缺点,我感觉会在Android兼容性上出问题.因为Android的位置权限分前台和后面,而且还有粗略和精
确之分,这些差异分散在不同的Android版本中,包中文档没有提到这些,当然也有可能该包已经兼容了各个Android版本。我没有在多个Android平台上验证,感兴趣
的看官们可以自己去验证。
看官们,与"如何获取位置信息"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

标签:await,permission,位置,Geolocator,信息,获取
From: https://blog.csdn.net/talk_8/article/details/139308262

相关文章

  • 为QT程序增加版本等属性信息
    1.在pro文件中增加VERSION=1.0.0.0,编译后,会在debug或release目录下生成xxx_resource.rc文件,使用编辑器打开进行编辑;2.在pro文件中增加RC_FILE=xxx_resource.rc,VERSION自动失效,编译后,即可增加属性信息。注意:由QT自动生成的RC文件默认使用UTF-8编码,属性信息中若含中文,windows......
  • 地理信息系统(GIS)软件的最新进展
    在数字化转型的浪潮中,地理信息系统(GIS)作为连接现实与数字世界的桥梁,其软件和技术的每一次迭代升级都在推动着空间信息处理和分析能力的飞跃。作为地理信息与遥感领域的探索者,本文将带您深入了解GIS软件的最新进展,揭示那些正在重塑行业面貌的创新技术和工具。  WebGIS:无......
  • 亮相CCIG2024,合合信息文档解析技术破解大模型语料“饥荒”难题
      近日,2024中国图象图形大会在古都西安盛大开幕。本届大会由中国图象图形学学会主办,空军军医大学、西安交通大学、西北工业大学承办,通过二十多场论坛、百余项成果,集中展示了生成式人工智能、大模型、机器学习、类脑计算等多个图像图形领域的进展。大模型技术......
  • 用户信息维表设计思路
    用户信息维表设计思路原创语兴呀语数2024-05-2909:26江苏数据开发交流(联系管理员进群)图片多系统数据整合与优化在大数据时代,用户信息往往来源于多个不同的系统,例如淘宝天猫线上订单、抖店线上订单、自有APP和小程序、线下门店等。如何将这些不同来源的数据整合成一个统......
  • 【毕业论文】基于springboot的考研信息管理系统
       本科生毕业论文论文题目:基于springboot的考研信息管理系统学   院:软件学院年   级:2020级专   业:软件工程姓   名:王帅学   号:20203241指导教师:杨丰       2024 年5 月 ......
  • python提取日志中访问IP信息+去重+汇总
    实现功能:1、提取日志文件中所有源IP2、对提取到的IP进行去重3、统计每个IP的访问次数4、输出到csv文件代码如下:importrefilter=r'"\s"(\d{1,3}(?:\.\d{1,3}){3})"\s'#使用正则表达式来匹配IP地址log_path="D:/你的日志文件位置.txt"withopen(l......
  • Springboot配置文件中账号密码等敏感信息的加解密
    说明:使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性比较低。打开application.properties或application.yml,比如MySQL登录密码,Redis登录密码以及第三方的密钥等等一览无余。这里介绍一个加解密组件jasypt,用以提高配置文件中敏感配置数据的......
  • 【数据驱动】【航空航天结构的高效损伤检测技术】一种数据驱动的结构健康监测(SHM)方法,
     ......
  • Deep Models Under the GAN: Information Leakage from Collaborative Deep Learning
    最近要看一些推理攻击的内容,把看过的都放过来吧DeepModelsUndertheGAN:InformationLeakagefromCollaborativeDeepLearningGAN下的深度模型:协作深度学习的信息泄漏ACMCCS2017文章目录一、论文信息1.题目2.作者3.期刊年限4.关键词二、背景三、创新......
  • 2 SAP前台操作手册-MM模块-采购管理-(标准/委外/寄售)采购信息记录创建、修改、显示、
    0总体说明SAP实施项目中,到了第3个阶段-系统实现,在这个阶段,因为蓝图汇报已经结束,配置也差不多完成了,自开发还在进行中,SAP标准功能下,可以进行基础业务的前台操作了,在实现阶段的尾端,客户指定的关键用户(俗称KU-KeyUser)会进行前台业务操作和练习,提高熟练程度,同时需要在外部SAP顾......