123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- // 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'
- };
- let AveLength = 4
- 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() {
- switch (this.data.status) {
- case '0':
- this.openLink();
- break;
- case '1':
- this.stopBeaconDiscovery();
- break;
- case '2':
- this.stopBeaconDiscovery();
- break;
- case '3':
- this.startBeaconDiscovery();
- break;
- default:
- break
- }
-
- },
- openLink(){
- let aveArr = []
- wx.showLoading({
- mask:true,
- title: '正在连接,请稍等',
- })
- this.openBluetooth(()=>{
- startBeaconDiscovery({uuids: ['FDA50693-A4E2-4FB1-AFCF-C6EB07647825']}).then(()=>{
- wx.hideLoading()
- wx.showToast({
- title: '连接成功',
- icon: 'success'
- })
- this.setData({
- status:'2'
- })
- 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')
- let aveAccuracy = {}
- let min = {
- id: '10001',
- val: 10000000
- } //取最小值
- Object.keys(classfiy).forEach(key=>{
- //每个major的AveLength个元素数组
- let arr = classfiy[key].filter(item=>{
- return item.accuracy > 0
- })
- if (arr.length<=0) {
- return
- }
- //每个major的平均值
- let ave = BeaconUtils.arrayAverage(arr.map(sub=>sub.accuracy))
- classfiy[key].forEach(item=>{
- item.accuracy = ave
- })
- aveAccuracy[key] = ave
- min = ave < min.val ? {id:key,val:ave} : min;
- })
- console.log(min);
- this.setData({
- classfiy,
- targetObj: {
- major:min.id
- }
- })
- })
- }).catch(()=>{
- wx.hideLoading()
- wx.showToast({
- title: '连接失败',
- icon: 'error'
- })
- })
- })
- },
-
- stopBeaconDiscovery() {
- wx.showLoading({
- mask:true,
- title: '正在取消连接,请稍等',
- })
- wx.stopBeaconDiscovery({
- success:()=>{
- wx.hideLoading()
- wx.showToast({
- title: '取消连接成功',
- icon: 'success'
- })
- innerAudioContext.stop();
- this.setData({
- status: '0',
- targetObj: {}
- })
- },
- fail:()=>{
-
- },
- complete:()=>{
-
- }
- })
- },
- // 扫一扫
- 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 => {
- target['1000'+item.type] = `${this.data.api_base_url}/data/${item.audio}`
- })
- 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,targetObj: {}})
- console.log('innerAudioContext', innerAudioContext)
- if (this.data.status == 2) {
- this.startBeaconDiscovery()
- }
- }
- })
- },
- detached: function () {
- innerAudioContext.stop();
- innerAudioContext.destroy();
- wx.stopBeaconDiscovery({})
- this.setData({status:"0"})
- }
- }
- })
|