xrea 发表于 2023-7-1 15:58:50

⭐火山安卓-定位扩展模块

1.模块介绍
在开发应用的时候发现官方的定位模块只封装了简单的地理位置类(Location)不能很好的操作手机的GPS获取经纬度,所有自己花了点时间扩展了下。
2.模块使用例子
-----------------------------------------代码开始-----------------------------------------
<火山程序 类型 = "通常" 版本 = 1 />

类 启动类 <公开 基础类 = 兼容窗口>
{
    变量 文本框_信息显示 <类型 = 文本框 隐藏值属性 = "0"
            @安卓.窗口.布局 = "p_layout_height_type = match_parent\np_layout_width_type = match_parent" 单行模式 = 假>
    变量 m定位监听器 <类型 = 定位监听器类>
    变量 m定位管理器 <参考 类型 = 定位管理器类>
    变量 全局广播动态接收器对象 <类型 = 全局广播动态接收器>

    方法 通知_被创建 <公开 注释 = "当窗口被创建后本方法被调用" 注释 = "本方法被调用后将紧跟着调用\"通知_被启动\"方法" @虚拟方法 = 可覆盖>
    参数 启动信息对象 <类型 = 启动信息类 注释 = "提供载入本窗口时所传递过来的启动信息,必定不为空对象.">
    参数 载入参数 <类型 = "对象类 []" 注释 = "提供载入本窗口时所传递过来的所有参数(\"载入窗口2\"方法传递)"
            注释 = "注意: 载入本窗口时所传递过来的所有基本数据类型参数均已经被自动转换为对应的" 注释 = "封装类对象,所以取用时需要使用对象类的对应\"对象到xxx\"方法将其转换回去.">
    参数 参数数目 <类型 = 整数 注释 = "提供\"载入参数\"数组的成员数目,如果为0,则\"载入参数\"可能为空对象.">
    {
      父对象.通知_被创建 (启动信息对象, 载入参数, 参数数目)// 调用基础类中的被覆盖虚拟方法
      如果 (本对象.检查拥有权限 (安卓权限.获取粗略位置) == -1 || 本对象.检查拥有权限 (安卓权限.获取精确位置) == -1)
      {
            变量 欲申请的权限 <类型 = "文本型 ">
            欲申请的权限 = 安卓权限.获取粗略位置
            欲申请的权限 = 安卓权限.获取精确位置
            // 未获取权限?
            本对象.请求权限 (欲申请的权限, 233)
      }
      否则
      {
            初始化定位信息 ()
      }

    }

    方法 通知_请求权限完毕 <公开 注释 = "当前应用程序请求了危险权限后,本方法将被调用." @虚拟方法 = 可覆盖>
    参数 请求码 <类型 = 整数 注释 = "请求权限所提供的请求码.">
    参数 权限 <类型 = "文本型[]" 注释 = "所请求的权限数组.">
    参数 授权结果 <类型 = "整数 []" 注释 = "权限授予的结果,0表示授权成功,-1表示拒绝授权.">
    {
      父对象.通知_请求权限完毕 (请求码, 权限, 授权结果)// 调用基础类中的被覆盖虚拟方法
      如果 (请求码 == 233)
      {
            如果 (授权结果 == 0 && 授权结果 == 0)
            {
                初始化定位信息 ()
            }
      }

    }

    方法 初始化定位信息
    {
      变量 定位条件 <类型 = 定位条件类>
      m定位管理器 = (定位管理器类)本对象.获取系统服务 (安卓服务.定位服务)
      定位条件.设置定位精度 (定位条件类.精度良好)
      定位条件.设置电源的需求 (定位条件类.耗电低)
      定位条件.设置是否需要海拔信息 (真)
      定位条件.设置是否需要方位信息 (真)
      变量 定位提供者 <类型 = 文本型>
      定位提供者 = m定位管理器.获取最佳的定位提供者 (定位条件, 真)
      本对象.文本框_信息显示.内容 = 本对象.文本框_信息显示.内容 + 格式化文本 ("最佳定位提供者:%s", 定位提供者) + "\n"
      m定位管理器.设置定位监听器 (定位提供者, 1000, 10, m定位监听器)

    }

    方法 定位监听器类_位置地点发生变化 <接收事件 类型 = 整数>
    参数 来源对象 <类型 = 定位监听器类 注释 = "提供事件产生的具体来源对象">
    参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
    参数 位置 <类型 = 地理位置类>
    {
      如果 (来源对象 == m定位监听器)
      {


            本对象.文本框_信息显示.内容 = 本对象.文本框_信息显示.内容 + 格式化文本 ("经度:%f,纬度:%f,海拔高度:%f", 位置.经度, 位置.纬度, 位置.海拔高度) + "\n"


      }
      返回 (0)
    }
}

-----------------------------------------代码结束-----------------------------------------
3.效果图

4.模块下载


火绒 发表于 2023-7-1 16:42:02

学习一下

创世魂 发表于 2023-7-1 20:47:35

好像封了吧, 位置传感器类名字是这个。


xrea 发表于 2023-7-2 10:18:13

创世魂 发表于 2023-7-1 20:47
好像封了吧, 位置传感器类名字是这个。

好吧,重复劳动了,但是我这个更底层,嘻嘻
页: [1]
查看完整版本: ⭐火山安卓-定位扩展模块