var KJTencentLocation = uni.requireNativePlugin("KJ-TencentLocation"); var kic = { "apiKey": "JTOBZ-KLLKQ-S325W-25JZC-JLHEV-WNF5J", //ios才有效,andorid的在App原生插件配置里设置BPMBZ-VSKE3-MC23F-O3KZO-AZGI7-PXFJI "deviceID": "oaid" //andorid必须设置,默认使用oaid,ios无需设置 } // 获取系统信息 const systemInfo = uni.getSystemInfoSync(); if (systemInfo.platform === 'ios') { // 如果是 iOS 平台 KJTencentLocation.setUserAgreePrivacy({"isAgree": true}); KJTencentLocation.getLocationAuthorizationStatus((res) => { console.log("getLocationAuthorizationStatus:" + JSON.stringify(res)); /** * status - 权限状态 0-还没决定 1-受限制 2-拒绝 3、4、5-已授权 * */ }); KJTencentLocation.requestLocationAuthorization((res) => { console.log("requestLocationAuthorization:" + JSON.stringify(res)); /** * status - 权限状态 0-还没决定 1-受限制 2-拒绝 3、4、5-已授权 * */ }); delete kic.deviceID } KJTencentLocation.init(kic); var dic = { "coordinateType": "GCJ02", //设置坐标系 GCJ02(火星坐标,即国测局坐标) WGS84(地球坐标,注:如果是海外,无论设置的是火星坐标还是地球坐标,返回的都是地球坐标) "requestLevel": 4, //请求等级 0(包含经纬度) 1(包含经纬度, 位置名称, 位置地址) 3(包含经纬度,位置所处的中国大陆行政区划) 4(包含经纬度,位置所处的中国大陆行政区划及周边POI列表) /**以下andorid有效**/ "mockEnable": false, //是否允许mockGps数据 设置为true后将不对mockGps进行过滤,是否允许应用对GPS进行模拟 "systemCacheEnable": false, //是否允许在定位失败情况下返回系统缓存位置 //"deviceID":"xxx", //设备id "userAgreePrivacy": true, //设置用户是否同意隐私协议政策 "allowCache": true, //是否允许使用缓存 "allowDirection": true, //是否允许使用设备传感器获取方向 "allowGPS": true, //是否允许使用GPS进行定位 "gnssSource": 20, //设置优先卫星定位信号来源 改设置仅对连续定位生效,20(GPS) 21(北斗) "gpsFirst": false, //首次定位是否等待卫星定位结果,默认为false 当设置为true时,首次定位会等待卫星定位结果,默认等待时间为30s,超时将返回网络定位结果 "gpsFirstTimeOut": 10000, //卫星定位优先时,等待卫星定位结果对的超时时间,单位: ms, 最多等待60s. "indoorLocationMode": true, //启动室内定位 "interval": 5000, //定位周期(位置监听器回调周期), 单位为 ms (毫秒). "locMode": 10, //定位模式 10(高精度定位模式,将同时使用网络定位和卫星定位,优先返回精度高的定位) 11(仅网络定位模式,将不启动gps定位,只使用网络定位,可以减少耗电量,但定位精度有所降低) 12(仅GPS定位模式) // "phoneNumber": "111", // "qq": "xxx", // "smallAppKey": "xxx", //设置分渠道的key编码号,例如小程序里面区分业务. /**以下ios有效**/ "distanceFilter": 0, //设置定位的最小更新距离 "desiredAccuracy": "best", //设置定位精度 bestForNavigation best nearestTenMeters hundredMeters kilometer threeKilometers "pausesLocationUpdatesAutomatically": false, //定设置位是否会被系统自动暂停 "allowsBackgroundLocationUpdates": true, //设置是否允许后台定位 为true 需要配置manifest.json->App常用其它设置->后台运行能力 location "activityType": 1, //设置用户的活动类型 1(未知的出行活动类型) 2(位置管理器专门为出行活动为汽车的时候导航) 3(位置管理器专门为步行、跑步、骑自行车等健身时,提供导航) 4(位置管理器专门为其他类型的大型交通工具导航,而不是汽车导航) //"headingFilter": 10, //设置当朝向改变时,每隔多少度调用一次 "headingOrientation": 0, //设置设备当前的朝向 0(未知) 1(竖屏) 2(竖屏正方向,颠倒) 3(屏左方向,主按钮在右侧) 4(横屏右方向,主按钮在左侧) 5(设备正面朝上) 6(设备正面朝下) "poiUpdateInterval": 10, //指定POI的更新间隔 单位秒 "enableAntiMockLocation": true //是否允许开启反作弊检查 } KJTencentLocation.setLocationManagerInfo(dic) export function requestSingleFreshLocation() { return new Promise((resolve, reject) => { console.log(KJTencentLocation.requestSingleFreshLocation) KJTencentLocation.requestSingleFreshLocation((res) => { console.log(res) if (systemInfo.platform === 'ios') { // 如果是 iOS 平台 if (res.location.fakeCode != 0) { uni.$u.toast('请关闭虚拟定位') let obj = { location: { latitude: '', longitude: '', city: '虚拟定位' } } resolve(obj) } } // if(res.location.latitude==0) { // uni.showModal({ // title: 'app想要获取您的定位权限', // content: '为了能够获取精确的数据,请去手机设置里手动开启app定位权限', // showCancel: false, // confirmText: '知道了,关闭弹窗', // success: function (res) { // if (res.confirm) { // console.log('用户点击确定'); // } else if (res.cancel) { // console.log('用户点击取消'); // } // } // }); // } resolve(res) }); }) }