当前位置: 首页 > news >正文

Android 系统定位和高德定位

文章目录

  • Android 系统定位和高德定位
    • 系统定位
      • 工具类
      • 封装LocationManager
      • 使用
    • 高德定位
      • 封装高德地图
      • 使用

Android 系统定位和高德定位

系统定位

工具类

public class LocationUtils {public static final int REQUEST_LOCATION = 0xa1;/*** 判断定位服务是否开启*/public static boolean isOpenLocationServer(Context context) {int locationMode = 0;try {locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);} catch (Settings.SettingNotFoundException e) {e.printStackTrace();return false;}return locationMode != Settings.Secure.LOCATION_MODE_OFF;}/*** 判断GPS是否可用*/public static boolean isGPSEnabled(Context context) {LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);return manager.isProviderEnabled(LocationManager.GPS_PROVIDER);}/*** 判断定位是否可用*/public static boolean isLocationEnabled(Context context) {LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);return manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) || manager.isProviderEnabled(LocationManager.GPS_PROVIDER);}/*** 开启位置服务*/public static void openLocation(Activity activity) {activity.startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), REQUEST_LOCATION);}/*** 开启位置服务*/public static void openLocation(Fragment fragment) {fragment.startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), REQUEST_LOCATION);}}

封装LocationManager

public class LocationHelper {private static OnLocationChangeListener mOnLocationChangeListener;private static MyLocationListener mLocationListener;private static LocationManager mLocationManager;private static String mProvider;/*** 注册*/public static void registerLocation(Context context, @Nullable OnLocationChangeListener listener) {mOnLocationChangeListener = listener;mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);mProvider = mLocationManager.getBestProvider(getCriteria(), true);Location lastKnownLocation = mLocationManager.getLastKnownLocation(mProvider);if (listener != null && lastKnownLocation != null) {listener.onLastKnownLocation(lastKnownLocation);}mLocationListener = new MyLocationListener();startLocation();}/*** 开始定位*/public static void startLocation() {// 第二个参数:更新定位的时间间隔,第三个参数:更新定位的距离范围mLocationManager.requestLocationUpdates(mProvider, 0, 0, mLocationListener);}/*** 停止定位*/public static void stopLocation() {mLocationManager.removeUpdates(mLocationListener);}/*** 设置定位参数** @return {@link Criteria}*/private static Criteria getCriteria() {Criteria criteria = new Criteria();// 设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细criteria.setAccuracy(Criteria.ACCURACY_FINE);// 设置是否要求速度criteria.setSpeedRequired(false);// 设置是否允许运营商收费criteria.setCostAllowed(false);// 设置是否需要方位信息criteria.setBearingRequired(false);// 设置是否需要海拔信息criteria.setAltitudeRequired(false);// 设置对电源的需求criteria.setPowerRequirement(Criteria.POWER_LOW);return criteria;}/*** 取消注册*/public static void unregisterLocation() {if (mLocationManager != null) {if (mLocationListener != null) {mLocationManager.removeUpdates(mLocationListener);}}mLocationManager = null;mLocationListener = null;mOnLocationChangeListener = null;}public interface OnLocationChangeListener {void onLastKnownLocation(Location location);void onLocationChanged(Location location);}public static class MyLocationListener implements LocationListener {@Overridepublic void onLocationChanged(@NonNull Location location) {if (mOnLocationChangeListener != null) {mOnLocationChangeListener.onLocationChanged(location);}}}
}
public class LocationService extends Service {public static void actionStart(Context context) {context.startService(new Intent(context, LocationService.class));}public static void actionStop(Context context) {context.stopService(new Intent(context, LocationService.class));}@SuppressLint("MissingPermission")@Overridepublic void onCreate() {super.onCreate();new Thread(() -> {Looper.prepare();LocationHelper.registerLocation(getApplicationContext(), new LocationHelper.OnLocationChangeListener() {@Overridepublic void onLastKnownLocation(Location location) {if (location != null) {Log.e("TAG", "onLastKnownLocation= " + location);}}@Overridepublic void onLocationChanged(Location location) {if (location != null) {Log.e("TAG", "onLocationChanged= " + location);stopSelf();}}});Looper.loop();}).start();}@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onDestroy() {super.onDestroy();LocationHelper.unregisterLocation();}
}

使用

// 开始定位
LocationService.actionStart(MainActivity.this, "start");// 停止定位
LocationService.actionStart(MainActivity.this, "stop");// 单次定位
LocationService.actionStart(MainActivity.this, "once");

高德定位

封装高德地图

public class GDLocationHelper {private static AMapLocationClient locationClient;private static OnLocationChangeListener mOnLocationChangeListener;private static MyLocationListener mListener;public static void register(Context context, @Nullable OnLocationChangeListener onLocationChangeListener) {mOnLocationChangeListener = onLocationChangeListener;initLocation(context);}private static void initLocation(Context context) {locationClient = new AMapLocationClient(context);AMapLocation lastKnownLocation = locationClient.getLastKnownLocation();if (lastKnownLocation != null && mOnLocationChangeListener != null) {mOnLocationChangeListener.onLastKnownLocation(lastKnownLocation);}// 设置定位监听mListener = new MyLocationListener();locationClient.setLocationListener(mListener);}public static void startLocation() {locationClient.stopLocation();locationClient.setLocationOption(getDefaultOption(false));locationClient.startLocation();}public static void startOnceLocation() {locationClient.stopLocation();locationClient.setLocationOption(getDefaultOption(true));locationClient.startLocation();}public static void stopLocation() {locationClient.stopLocation();}public static void unregister() {stopLocation();locationClient.onDestroy();locationClient = null;mOnLocationChangeListener = null;mListener = null;}public static AMapLocationClientOption getDefaultOption(boolean isOnce) {AMapLocationClientOption mOption = new AMapLocationClientOption();mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式
//        mOption.setGpsFirst(false);//可选,设置是否gps优先,只在高精度模式下有效。默认关闭
//        mOption.setHttpTimeOut(30000);//可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效
//        mOption.setNeedAddress(true);//可选,设置是否返回逆地理地址信息。默认是trueif (isOnce) {mOption.setOnceLocation(true);//可选,设置是否单次定位。默认是falsemOption.setOnceLocationLatest(true);//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用} else {mOption.setOnceLocation(false);mOption.setInterval(2_000);//可选,设置定位间隔。默认为2秒}mOption.setMockEnable(false); //设置是否允许模拟位置
//        AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP);//可选, 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP
//        mOption.setSensorEnable(false);//可选,设置是否使用传感器。默认是falsemOption.setWifiScan(true); //可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差mOption.setLocationCacheEnable(true); //可选,设置是否使用缓存定位,默认为true
//        mOption.setGeoLanguage(AMapLocationClientOption.GeoLanguage.DEFAULT);//可选,设置逆地理信息的语言,默认值为默认语言(根据所在地区选择语言)return mOption;}public static class MyLocationListener implements AMapLocationListener {@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {if (mOnLocationChangeListener != null) {mOnLocationChangeListener.onLocationChanged(aMapLocation);}}}public interface OnLocationChangeListener {void onLastKnownLocation(AMapLocation location);void onLocationChanged(AMapLocation location);}
}
public class GDLocationService extends Service {private volatile boolean isOnce = false;public static void actionStart(Context context) {actionStart(context, null);}public static void actionStart(Context context, String command) {context.startService(new Intent(context, GDLocationService.class).putExtra("command", command));}public static void actionStop(Context context) {context.stopService(new Intent(context, GDLocationService.class));}@Overridepublic void onCreate() {super.onCreate();GDLocationHelper.register(getApplicationContext(), new GDLocationHelper.OnLocationChangeListener() {@Overridepublic void onLastKnownLocation(AMapLocation location) {if (location != null) {Log.e("TAG", "onLastKnownLocation= " + location.toString());}}@Overridepublic void onLocationChanged(AMapLocation location) {if (location != null) {Log.e("TAG", "onLocationChanged= " + location.toString());if (isOnce) {stopSelf();}}}});}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {String command = intent.getStringExtra("command");switch (command) {case "once":isOnce = true;GDLocationHelper.startOnceLocation();break;case "stop":GDLocationHelper.stopLocation();break;case "start":default:isOnce = false;GDLocationHelper.startLocation();break;}return super.onStartCommand(intent, flags, startId);}@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onDestroy() {super.onDestroy();GDLocationHelper.unregister();Log.e("TAG", "onDestroy");}
}

使用

// 开始定位   
GDLocationService.actionStart(MainActivity.this, "start");// 停止定位
GDLocationService.actionStart(MainActivity.this, "stop");// 单次定位
GDLocationService.actionStart(MainActivity.this, "once");

相关文章:

Android 系统定位和高德定位

文章目录 Android 系统定位和高德定位系统定位工具类封装LocationManager使用 高德定位封装高德地图使用 Android 系统定位和高德定位 系统定位 工具类 public class LocationUtils {public static final int REQUEST_LOCATION 0xa1;/*** 判断定位服务是否开启*/public sta…...

Day20_网络编程(软件结构,网络编程三要素,UDP网络编程,TCP网络编程)

文章目录 Day20 网络编程学习目标1 软件结构2 网络编程三要素2.1 IP地址和域名1、IP地址2、域名3、InetAddress类 2.2 端口号2.3 网络通信协议1、OSI参考模型和TCP/IP参考模型2、UDP协议3、TCP协议 2.4 Socket编程 3 UDP网络编程3.1 DatagramSocket和DatagramPacket1、Datagram…...

https://registry.npm.taobao.org淘宝npm镜像仓库地址更新

在工作中有遇见获取淘宝的npm镜像存在问题,图示如下的报错: 根据报错的内容是说 https://registry.npm.taobao.org地址访问失败了,然后通过排查发现淘宝的npm镜像仓库地址有更新了。需要使用最新的地址 旧的淘宝镜像仓库:https://…...

离散数学(一) 集合

属于关系 表示 枚举法; 叙述法; 文氏图法 基数 空集 全集 全集是相对唯一的 相等关系 有相同元素看作一个元素 包含关系 幂集 集合运算 并集 交集 补集 差集 对称差集 定理 可数集合与不可数集合 自然数集 等势 如果存在集合A到集合B的双射(又称一一…...

IOS不使用默认的mainStroryboard作为首个controller的方法

步骤1: 删除info.plist文件下的一条配置,如图 步骤2: 编辑AppDelegate.m,参考以下代码 interface AppDelegate () //property (strong, nonatomic) UIWindow * window; property(nonatomic,strong) UIWindow * win; property(…...

Qt(C++)面试题 | 精选25项常问

面试是每个求职者都必须经历的一关,而QT面试更是需要面试者有深厚的编程基础和丰富的实战经验。下面我们为大家整理了25道QT面试题,希望能够帮助大家在求职路上获得成功。 ​Qt 中常用的五大模块是哪些? Qt 中常用的五大模块包括: QtCore:提供了 Qt 的核心功能,例如基本的…...

个人博客系列-环境配置-gitee(2)

注册gitee账户 地址:https://gitee.com/ 此步骤省略 新建仓库 执行以下命令 即可 拉取代码 创建目录 mkdir myCode && cd myCode 登录gitee找到项目,点击克隆,拉取代码 连接远程仓库命令 git remote add origin 仓库地址http…...

DevOps 周期的 6 个 C

中型到大型软件开发项目涉及许多人员、多个团队、资源、工具和开发阶段。它们都需要以某种方式进行管理和简化,不仅可以获得所需的产品,而且还要确保将来在不断变化的环境下易于管理和维护。组织通常遵循许多项目管理模型和技术。DevOps 是其中之一&…...

九、计算机视觉-形态学基础概念

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、形态学的基本概念1.1 定义1.2 结构元素1.3 形态学操作 二、形态学的应用总结 前言 现在开始后面几课将介绍计算机视觉中的形态学理论和技术,包…...

杰发科技AC7801——SRAM 错误检测纠正

0.概述 7801暂时无错误注入,无法直接进中断看错误情况,具体效果后续看7840的带错误注入的测试情况。 1.简介 2.特性 3.功能 4.调试 可以看到在库文件里面有ecc_sram的库。 在官方GPIO代码里面写了点测试代码 成功打开2bit中断 因为没有错误注入&#x…...

普中51单片机学习(AD转换)

AD转换 分辨率 ADC的分辨率是指使输出数字量变化一个相邻数码所需输入模拟电压的变化量。常用二进制的位数表示。例如12位ADC的分辨率就是12位,或者说分辨率为满刻度的1/(2^12)。 一个10V满刻度的12位ADC能分辨输入电压变化最小值是10V1/(2^12 )2.4mV。 量化误差 …...

YoloV8改进策略:主干网络改进|MogaNet——高效的多阶门控聚合网络

文章目录 摘要1、简介2、相关工作2.1、视觉Transformers2.2、ViT时代的卷积网络3、从多阶博弈论交互的角度看表示瓶颈4、方法论4.1、MogaNet概述4.2、多阶门控聚合4.3、通过通道聚合进行多阶特征重新分配4.4、实现细节5、实验5.1、ImageNet分类5.2、密集预测任务5.3、消融实验和…...

Sora:OpenAI引领创新浪潮的AI视频模型

Sora:OpenAI引领创新浪潮的AI视频模型 OpenAI作为人工智能领域的佼佼者,接下来,让我们一起深入了解Sora的技术特点、应用场景以及它对未来创作方式的潜在影响。 首先,让我们来探讨Sora的技术特点。Sora是一种基于深度学习的视频生…...

torch报错:[winerror 126] 找不到指定的模块torch_python.dll“ or one of its dependencies.

[winerror 126] 找不到指定的模块。 error loading "d:\miniconda\envs\action_env\lib\site-packages\torch\lib\torch_python.dll" or one of its dependencies. 在使用这个yolov5模块的时候发现了这个错误,错误原因是因为python版本和torch版本冲突。…...

Linux日志轮替

文章目录 1. 基本介绍2. 日志轮替文件命名3. logrotate 配置文件4. 把自己的日志加入日志轮替5. 日志轮替机制原理6. 查看内存日志 1. 基本介绍 日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后&#xff…...

Docker Container(容器)

"在哪里走散,你都会找到我~" Docker 容器 什么是容器? 通俗来讲,容器是镜像运行的实体。我们对于镜像的认知是,“存储在磁盘上的只读文件”。当我们启动一个容器的本质,就是启动一个进程,即容器…...

week04day03(爬虫 beautifulsoup4、)

一. 使用bs4解析网页 下载bs4 - pip install beautifulsoup4 使用的时候 import bs4专门用于解析网页的第三方库 在使用bs4的时候往往会依赖另一个库lxml pip install lxml 网页代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><…...

04 动力云客之登录后获取用户信息+JWT存进Redis+Filter验证Token + token续期

1. 登录后获取用户信息 非常好实现. 只要新建一个controller, 并调用SS提供的Authentication对象即可 package com.sunsplanter.controller;RestController public class UserController {GetMapping(value "api/login/info")public R loginInfo(Authentication a…...

RISC-V知识总结 —— 指令集

资源1: RISC-V China – RISC-V International 资源2: RISC-V International – RISC-V: The Open Standard RISC Instruction Set Architecture 资源3: RV32I, RV64I Instructions — riscv-isa-pages documentation 1. 指令集架构的类型 在讨论RISC-V或任何处理器架构时&…...

基于Java jsp+mysql+Spring的汽车出租平台租赁网站平台设计和实现

基于Java jspmysqlSpring的汽车出租平台租赁网站平台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...