// components/map-sense.js const innerAudioContext = wx.createInnerAudioContext(); import http from '../../utils/http'; import {promisify,BeaconUtils} from '../../utils/util'; let openBluetoothAdapter = promisify(wx.openBluetoothAdapter) let startBeaconDiscovery = promisify(wx.startBeaconDiscovery) import { CDN_URL, CONNECT_STATUS, STATUS_TEXT, API_BASE_URL } from '../../config/index'; const STATUS_PIC = { '0': 'default', '1': 'loading', '2': 'success', '3': 'fail' }; const TXPOWER = 0 // 距离经验值(调试所得) const N = 14 let AveLength = 10 Component({ /** * 组件的属性列表 */ properties: { }, /** * 组件的初始数据 */ data: { status: "0", cdn_url: CDN_URL, connect_status: CONNECT_STATUS, status_text: STATUS_TEXT, status_pic: STATUS_PIC, targetObj: {}, audio_address: {}, api_base_url: API_BASE_URL, // 是否是扫码播放 isScanPlay: false, cdn_url:CDN_URL }, /** * 组件的方法列表 */ methods: { openBluetooth(cb) { openBluetoothAdapter().then(res=>{ cb(res) },()=>{ wx.showToast({ title: '请打开蓝牙', icon: 'error', duration: 2000 }) }) }, toHandle() { let aveArr = [] this.openBluetooth(()=>{ startBeaconDiscovery({uuids: ['FDA50693-A4E2-4FB1-AFCF-C6EB07647825']}).then((res)=>{ wx.onBeaconUpdate(data=>{ if (aveArr.length == AveLength) { aveArr[0] = data.beacons } else{ aveArr.push(data.beacons) } let all = [] aveArr.forEach(item => { all = all.concat(item) }); let classfiy = BeaconUtils.classification(all,'major') Object.keys(classfiy).forEach(key=>{ //每个major的AveLength个元素数组 let arr = classfiy[key].map(item=>{ return item.accuracy }) //每个major的平均值 let ave = BeaconUtils.arrayAverage(arr) classfiy[key].forEach(item=>{ item.accuracy = ave }) }) this.setData({ classfiy, status:'2' }) }) }).catch(()=>{ wx.showToast({ title: '连接失败', icon: 'error', duration: 500 }) }) }) }, stopBeaconDiscovery() { var that = this; console.log('这是取消连接') wx.showToast({ title: '取消连接成功', icon: 'error', duration: 1000 }) wx.stopBeaconDiscovery({}) // 取消连接 停止播放音乐 目标对象置为{} 设置为第一次进入 innerAudioContext.stop(); that.setData({ status: '0', targetObj: {} }) }, // 扫一扫 toScanCode() { var that = this; that.setData({ isScanPlay: true }) wx.scanCode({ success(res) { console.log('success', res) console.log('result', res['result']) console.log('innerAudioContext', innerAudioContext) that.setData({ targetObj: {} }) innerAudioContext.autoplay = true; innerAudioContext.src = res['result'] innerAudioContext.loop = true; innerAudioContext.play(); }, fail: function (res) { console.log('fail innerAudioContext', innerAudioContext) that.setData({ isScanPlay: false }) innerAudioContext.play(); return; }, complete(){ // console.log() that.setData({ isScanPlay: false }) } }) }, getAudios() { http.get('/api/web/getAudioIndex') .then(res => { let { data } = res,target = {}; data.forEach(item => { switch (item.type) { case 1: target['10001'] = `${this.data.api_base_url}/data/${item.audio}`; break; case 2: target['10002'] = `${this.data.api_base_url}/data/${item.audio}`; break; case 3: target['10003'] = `${this.data.api_base_url}/data/${item.audio}`; break; default: break } }) this.setData({ audio_address: target }) }) } }, lifetimes:{ attached: function () { innerAudioContext.stop(); //获取语音 this.getAudios(); var that = this; // wx.onAccelerometerChange(function (e) { // console.log('手机咚咚咚给') // if (Math.abs(e.x) > 1.1 && Math.abs(e.y) > 1.1) { // //         wx.showToast({ title: "摇一摇" }) // } else if (Math.abs(e.x) > 0.07 && Math.abs(e.y) > 0.02 && that.data.status === '2') { // // 扫一扫播放的话 移动无效 // if (that.data.isScanPlay) return; // that.startBeaconDiscovery() // } else { // //         wx.showToast({ title: "静止" }) // } // }), innerAudioContext.onEnded(() => { console.log('播放结束了') if (this.data.isScanPlay) { innerAudioContext.stop() this.setData({ isScanPlay: false }) this.targetObj = {} console.log('innerAudioContext', innerAudioContext) if (this.data.status == 2) { console.log(2222222222222222) this.startBeaconDiscovery() } } }) }, detached: function () { innerAudioContext.stop(); innerAudioContext.destroy(); wx.stopBeaconDiscovery({}) this.setData({status:"0"}) } } })