Android进阶之路 - 定位当前位置、获取经纬度

article/2025/7/11 16:59:24

最近又遇到定位场景,需要上传经纬度,正好同事写了,我就记录一下方便你我他 ~ ~

今年开始用的kt比较多,所以篇内用的kt,见谅见谅

前情悉知

  • 获取当前位置时,需要判断用户是否授权,这里用到的是 XXPermissions
  • 未授权会提示用户进行授权,已授权会直接开始调用方法获取经纬度

如何验证获取的定位准确与否,经纬度对不对,可以通过这里直接进行确定

在这里插入图片描述

调用方式

   //经度var lat = ""//纬度var lon = ""LocationUtils.locationInfo(activity, object : LBSLocationListener {override fun onLocationUpdate(p0: LBSLocation) {           lat = p0.longitude.toString()lon = p0.latitude.toString()}override fun onLocationFailed(p0: Int) {lat = "0"lon = "0"}})

LocationUtils

因为是在项目中使用的方法,部分涉及到了前端交互中需要提供的参数,如果不需要的话,自行剔除就好

package youself.packname 自行替换import android.Manifest
import android.app.Activity
import android.content.Context
import com.alipay.mobile.common.lbs.LBSLocation
import com.alipay.mobile.common.lbs.LBSLocationListener
import com.alipay.mobile.common.lbs.LBSLocationManagerProxy
import com.blankj.utilcode.util.PermissionUtils
import com.blankj.utilcode.util.PermissionUtils.FullCallback
import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldRequest
import com.blankj.utilcode.util.ToastUtils
import com.blankj.utilcode.util.UtilsTransActivity
import com.hjq.permissions.OnPermissionCallback
import com.hjq.permissions.XXPermissions
import com.tencent.qcloud.tuicore.util.PermissionUtils.PermissionConstants
import java.util.concurrent.TimeUnit.SECONDS/*** @author 超人(现同事的自我别称)* @class desc 获取定位信息*/
object LocationUtils {private var permission =arrayOf(Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION)/*** 获取定位信息*/fun location(context: Context?, listener: LBSLocationListener) {if (PermissionUtils.isGranted(Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION)) {getLocationInfo(context, listener)} else {PermissionUtils.permission(PermissionConstants.LOCATION).rationale { utilsTransActivity: UtilsTransActivity?, shouldRequest: ShouldRequest ->shouldRequest.again(true)}.callback(object : FullCallback {override fun onGranted(permissionsGranted: List<String>) {getLocationInfo(context, listener)}override fun onDenied(permissionsDeniedForever: List<String>,permissionsDenied: List<String>) {if (!permissionsDeniedForever.isEmpty()) {PermissionUtils.launchAppDetailsSettings()}}}).request()}}/*** 获取定位信息*/fun locationInfo(context: Activity?, listener: LBSLocationListener) {if (isOpenLocation(context)) {getLocationInfo(context, listener)} else {//todo 拿注册给的默认定位 前端要求进去先调用startLocation(context, object : isEnableLocationListener {override fun isEnableLocation(isLocation: Boolean) {if (isLocation) {getLocationInfo(context, listener)} else {var lbs = LBSLocation()lbs.longitude = 121.386344lbs.latitude = 31.30111lbs.city = "上海市"listener.onLocationUpdate(lbs)}}})}}/*** 开启定位*/fun startLocation(context: Activity?, listener: isEnableLocationListener) {XXPermissions.with(context)// // 申请单个权限// .permission(Permission.RECORD_AUDIO)// 申请多个权限.permission( permission)// 设置权限请求拦截器(局部设置)//.interceptor(new PermissionInterceptor())// 设置不触发错误检测机制(局部设置)//.unchecked().request(object : OnPermissionCallback {override fun onGranted(permissions: MutableList<String>, all: Boolean) {if (all) {// toast("获取录音和日历权限成功")if (GpsUtil.isOPen(context)) {listener.isEnableLocation(true)} else {GpsUtil.goLocationSetting(context, listener)}} else {listener.isEnableLocation(false)ToastUtils.showLong("获取部分权限成功,但部分权限未正常授予~")}}override fun onDenied(permissions: MutableList<String>, never: Boolean) {listener.isEnableLocation(false)if (never) {// toast("被永久拒绝授权,请手动授予录音和日历权限")// 如果是被永久拒绝就跳转到应用权限系统设置页面// TODO: 仅用户手动触发权限才可以去设置页面XXPermissions.startPermissionActivity(context, permissions)} else {ToastUtils.showLong("获取权限失败~")}}})}fun getLocationInfo(context: Context?, listener: LBSLocationListener) {// context上下文     // ,  // 是否需要gpsLBSLocationManagerProxy.getInstance().doRequestLocationUpdates(context,false,  // 定位回调listener,SECONDS.toMillis(30L),   // 定位时间间隔SECONDS.toMillis(31L),  // 定位超时时间true,  // 是否需要逆地理"test",  // biz标识false,  // 是否需要速度"F" // 是否是H5)}/** 是否开启定位*/fun isOpenLocation(context: Context?): Boolean {return XXPermissions.isGranted(context,permission) && GpsUtil.isOPen(context)}/*remove 定位注册的回调*/fun removeUpdates(context: Context?, listener: LBSLocationListener) {LBSLocationManagerProxy.getInstance().removeUpdates(context, listener)}/*获取最近一次定位成功的位置*/fun getLastKnownLocation(context: Context?): LBSLocation {return LBSLocationManagerProxy.getInstance().getLastKnownLocation(context)}interface isEnableLocationListener {fun isEnableLocation(isLocation: Boolean)}
}

http://chatgpt.dhexx.cn/article/5RWM3M4R.shtml

相关文章

vue-amap实现实现初始化并定位当前位置,搜索,定位,增加点标记

实现如图展示&#xff0c;初始化并定位当前位置&#xff0c;搜索&#xff0c;定位&#xff0c;增加点标记 下载vue 1.vue页设置 如果是新版web-js的密钥&#xff0c;有配套的安全秘钥&#xff0c;则需要另外在created加入&#xff0c;否则会报undefined window._AMapSecurity…

vue3定位当前位置,获取当前位置的经纬度

vue3定位当前位置&#xff0c;获取当前位置的经纬度 注意事项&#xff08;访问地址必须是https&#xff09;获取当前位置经纬度 注意事项&#xff08;访问地址必须是https&#xff09; 在vue.config.js文件内设置https:true&#xff0c;然后重启一下项目 获取当前位置经纬度 …

新建文本文档

使用百度地图&#xff0c;定位你当前位置并显示 1、准备 注册百度开发者账号到百度地图开放平台创建应用&#xff08;as获取SHA1值&#xff09; 2、将sdk整到你的项目中去 - 在你app的gradle.build中添加 dependencies {...... compile files(libs/baidumapapi_base_v4_0…

web端定位:获取当前地理位置

2019独角兽企业重金招聘Python工程师标准>>> 方法一:html5原生提供的定位: 讲解:在支持HTML5的浏览器下,navigator对象下有一个属性----geolocation,而geolocation属性又有个方法getCurrentPosition(回调函数1,回调函数2)可以通过浏览器向设备发起定位请求,浏…

uniapp 之定位当前位置 (uni.getLocation,腾讯地图,javascript)

第一种 uniapp uniapp 封装的方法可以拿到城&#xff0c;市&#xff0c;县&#xff0c;经纬度。 实例&#xff1a; //获取位置GetLOcation: function() {var that this;uni.getLocation({type: gcj02,success: (res) > {console.log(res)var latitude parseFloat(res.la…

爆款专栏《Python 黑科技》目录导航丨进度:12/50

《Python 快速入门专栏丨掌握基础》和《Python 黑科技丨练习应用》由 CSDN 博客专家丨全站排名 Top 8 的硬核博主 不吃西红柿 倾力打造&#xff0c;旨在帮助大家快速入门掌握 Python。 更有学习资料&#xff0c;简历和 PPT 模板&#xff0c;微信公众号 【信息技术智库】关注我&…

安卓12解除进程限制方法汇总

一、关于安卓12 使用VMOS PRO 借助电脑激活步骤 第一步&#xff0c;使用usb线将手机连接至电脑。 第二步&#xff0c;打开手机的“开发者选项”&#xff0c;打开USB调试开关&#xff0c;确保手机已进入USB调试模式。 第三步&#xff0c;将激活程序包&#xff08;vmos_activa…

电脑技巧:推荐五款非常棒的小众软件,值得收藏

目录 1、Foodie&#xff08;美食相机&#xff09; 2、黑阈APP 3、Sleep Cycle 睡眠助手APP 4、烧杯——化验APP 5、123看图器 今天小编给大家分享五款非常棒的小众软件&#xff0c;生活中非常实用&#xff0c;感兴趣的朋友欢迎收藏&#xff01; 1、Foodie&#xff08;美食相…

永恒之黑漏洞复现

永痕之黑 1. 永恒之黑漏洞相关信息 漏洞介绍 https://nvd.nist.gov/vuln/detail/CVE-2020-0796 漏洞影响版本&#xff1a; Windows 10 Version 1903 for 32-bit Systems Windows 10 Version 1903 for x64-based Systems Windows 10 Version 1903 for ARM64-based Systems Wi…

手机技巧:推荐一款手机省电、提升流畅度APP

目录 软件详情 基本介绍 软件功能 软件特色 使用方法 软件对比 结论 今天给大家推荐一款手机省电、提升流畅度APP&#xff0c;感兴趣的朋友可以下载一下&#xff01; 软件详情 黑阈app是一款非常实用的系统优化类手机APP。使用它能够禁止软件后台运行耗电&#xff0c;既…

linux usb 黑 白 名单_安卓手机如何一键提升手机性能?用黑阈

安卓手机现状 安卓现在的旗舰机并不比苹果差&#xff0c;但是依然对手机小白很不友好&#xff0c;安卓属于开源&#xff0c;自由度较大&#xff0c;可供发挥的空间更高。需要一定基础才能充分利用安卓的性能。而苹果依然是针对小白的&#xff0c;系统会自行优化&#xff0c;自由…

如何root安卓手机_安卓手机如何一键提升手机性能?用黑阈

安卓手机现状 安卓现在的旗舰机并不比苹果差&#xff0c;但是依然对手机小白很不友好&#xff0c;安卓属于开源&#xff0c;自由度较大&#xff0c;可供发挥的空间更高。需要一定基础才能充分利用安卓的性能。而苹果依然是针对小白的&#xff0c;系统会自行优化&#xff0c;自由…

黑阈使用方法

一、从各大应用市场载「 黑阈 」。 二、切换到「 使用 」的页面&#xff0c;选择「 进入黑阈 」 三、打开「 开发者选项 」跟 「 USB调试 」 四、连接 USB &#xff0c;允许 USB 调试 五、电脑打开下面这个网页&#xff0c;下载相应的 SDK。 https://developer.android.goo…

使用树莓派3b+作为黑阈激活器

黑阈&#xff08;y&#xff09;不需要 root 就能待机&#xff08;App Standby&#xff0c;Android 6.0 引入&#xff0c;部分设备不支持&#xff09;或强行停止应用&#xff0c;防止应用持续运行。 黑阈不处理非“黑阈清单”内应用。当您启动应用&#xff0c;使用完退出&#x…

枚举类型是什么

C语言详解 - 枚举类型 注&#xff1a;以下全部代码的执行环境为VC 6.0 在程序中&#xff0c;可能需要为某些整数定义一个别名&#xff0c;我们可以利用预处理指令#define来完成这项工作&#xff0c;您的代码可能是&#xff1a; #define MON 1 #define TUE 2 #define WED 3 …

ts枚举类

参考官方文档:https://www.tslang.cn/docs/handbook/enums.html 理解:枚举是列举固定几个值,直接定义变量的话的话可以随意定义&#xff0c;枚举只能使用你定义好的几个值,枚举是个类&#xff0c;定义的值是基本类型,类能有更多操作 例如你定义一个方法接收一个参数&#xff0…

Java 枚举类型原理分析为什么枚举比用静态变量多消耗两倍的内存

一 起源&#xff1a;枚举是一种特殊的数据类型&#xff0c;一般用来列举有限个、同类型的常量。它能保证参数的安全性&#xff0c;如方法声明传入的参数&#xff0c;必须是指定枚举中的常量。但是Android开发文档指出&#xff0c;使用枚举会比使用静态变量多消耗2倍内存。为什么…

java枚举转json

1、背景 java后端的枚举类型&#xff0c;要展示到前端&#xff0c;提供给用户进行下拉选择&#xff0c;java后端需要封装enum为json字符串提供给前端&#xff0c;需要首先将枚举类型转为list&#xff0c;然后再转为json字符串。 2、方案 方案也很简单&#xff0c;使用EnumSe…

枚举类的使用

文章目录 前言一、自定义枚举类二、使用enum定义枚举类1.Enum类的主要方法2.实现接口的枚举类 前言 1&#xff09; 类的对象只有有限个&#xff0c;确定的。举例如下&#xff1a; 星期&#xff1a;Monday(星期一)、…、Sunday(星期天) 性别&#xff1a;Man(男)、Woman(女) 季节…

用户名枚举

一. 漏洞描述 常存在于系统登录界面&#xff0c;由于错误配置或设计缺陷&#xff0c;当向系统提交有效账户和无效账户时&#xff0c;服务器会有不同的响应&#xff0c;利用服务器响应的不同&#xff0c;攻击者可以获取到系统已经存在的账户&#xff0c;可用于暴力破解&#xff…