uni-app IOS平台 uni.getLocation 开启高精度时返回经纬度需10秒

发布于 1周前 作者 wuwangju 来自 Uni-App

uni-app IOS平台 uni.getLocation 开启高精度时返回经纬度需10秒

错误描述

关了高精度瞬间调取完毕,但是返的不准

uni.getLocation({
type: "gcj02",
geocode: true,
isHighAccuracy: true,
..............
信息 描述
开发环境 uni-app
版本号 未提及
项目创建方式 未提及
5 回复

安卓开启高精度就很快,就IOS慢,使用的是高德SDK


作者有结果了吗 我也有这个问题

一年了,官方还没解决,真服了

我最近也遇到了,导致很多功能没法正常使用

在uni-app中,如果你在iOS平台上使用uni.getLocation方法并开启高精度定位(即设置highAccuracytrue),确实可能会遇到定位时间较长的问题,尤其是首次定位时,这通常是由于设备需要搜索卫星信号或进行网络定位。

为了优化用户的体验,你可以考虑以下几种方法,包括预处理、使用定时器以及显示加载提示等。以下是一个示例代码,展示了如何在uni-app中实现这些功能:

export default {
    data() {
        return {
            location: null,
            loading: false,
            timer: null
        };
    },
    methods: {
        getLocation() {
            // 显示加载提示
            this.loading = true;

            // 设置一个最大等待时间(例如10秒)
            const maxWaitTime = 10000; // 10秒

            // 启动定时器
            this.timer = setTimeout(() => {
                // 如果超时,清除加载提示
                this.loading = false;
                uni.showToast({
                    title: '定位超时',
                    icon: 'none'
                });
            }, maxWaitTime);

            // 调用定位接口
            uni.getLocation({
                type: 'gcj02', // 坐标系
                highAccuracy: true, // 高精度定位
                success: (res) => {
                    // 清除定时器
                    clearTimeout(this.timer);

                    // 隐藏加载提示
                    this.loading = false;

                    // 处理定位结果
                    this.location = {
                        latitude: res.latitude,
                        longitude: res.longitude
                    };

                    console.log('定位成功:', this.location);

                    // 在这里可以执行后续操作,如更新页面数据等
                },
                fail: (err) => {
                    // 清除定时器
                    clearTimeout(this.timer);

                    // 隐藏加载提示
                    this.loading = false;

                    // 处理定位失败情况
                    uni.showToast({
                        title: '定位失败',
                        icon: 'none'
                    });
                    console.error('定位失败:', err);
                }
            });
        }
    },
    onLoad() {
        // 页面加载时调用定位方法
        this.getLocation();
    },
    onUnload() {
        // 页面卸载时清除定时器(防止内存泄漏)
        if (this.timer) {
            clearTimeout(this.timer);
        }
    }
};

上述代码展示了如何在uni-app中调用uni.getLocation方法,并设置了一个最大等待时间。如果在指定时间内没有获取到定位结果,则会显示一个“定位超时”的提示。同时,使用了loading变量来控制加载提示的显示与隐藏,以提供更好的用户体验。在实际应用中,你可以根据需求调整最大等待时间,并添加更多的错误处理逻辑。

回到顶部