|
@@ -1,27 +1,34 @@
|
|
|
// 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)
|
|
|
+let innerAudioContext = wx.createInnerAudioContext();
|
|
|
+innerAudioContext.autoplay = true;
|
|
|
+innerAudioContext.loop = true;
|
|
|
|
|
|
-import { CDN_URL, CONNECT_STATUS, STATUS_TEXT, API_BASE_URL } from '../../config/index';
|
|
|
+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'
|
|
|
+ 0: "default",
|
|
|
+ 1: "loading",
|
|
|
+ 2: "success",
|
|
|
+ 3: "fail",
|
|
|
};
|
|
|
|
|
|
-let AveLength = 4
|
|
|
+let AveLength = 4;
|
|
|
|
|
|
Component({
|
|
|
/**
|
|
|
* 组件的属性列表
|
|
|
*/
|
|
|
- properties: {
|
|
|
- },
|
|
|
+ properties: {},
|
|
|
|
|
|
/**
|
|
|
* 组件的初始数据
|
|
@@ -37,7 +44,7 @@ Component({
|
|
|
api_base_url: API_BASE_URL,
|
|
|
// 是否是扫码播放
|
|
|
isScanPlay: false,
|
|
|
- cdn_url:CDN_URL
|
|
|
+ cdn_url: CDN_URL,
|
|
|
},
|
|
|
|
|
|
/**
|
|
@@ -45,218 +52,196 @@ Component({
|
|
|
*/
|
|
|
methods: {
|
|
|
openBluetooth(cb) {
|
|
|
- openBluetoothAdapter().then(res=>{
|
|
|
- cb(res)
|
|
|
- },()=>{
|
|
|
- wx.showToast({
|
|
|
- title: '请打开蓝牙',
|
|
|
- icon: 'error',
|
|
|
- duration: 2000
|
|
|
- })
|
|
|
- })
|
|
|
+ openBluetoothAdapter().then(
|
|
|
+ (res) => {
|
|
|
+ cb(res);
|
|
|
+ },
|
|
|
+ () => {
|
|
|
+ wx.showToast({
|
|
|
+ title: "请打开蓝牙",
|
|
|
+ icon: "error",
|
|
|
+ duration: 2000,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
},
|
|
|
toHandle() {
|
|
|
switch (this.data.status) {
|
|
|
- case '0':
|
|
|
+ case "0":
|
|
|
this.openLink();
|
|
|
break;
|
|
|
- case '1':
|
|
|
+ case "1":
|
|
|
this.stopBeaconDiscovery();
|
|
|
break;
|
|
|
- case '2':
|
|
|
+ case "2":
|
|
|
this.stopBeaconDiscovery();
|
|
|
break;
|
|
|
- case '3':
|
|
|
+ case "3":
|
|
|
this.startBeaconDiscovery();
|
|
|
break;
|
|
|
default:
|
|
|
- break
|
|
|
+ break;
|
|
|
}
|
|
|
-
|
|
|
},
|
|
|
|
|
|
- openLink(){
|
|
|
- let aveArr = []
|
|
|
+ playMusic(url) {
|
|
|
+ innerAudioContext.src =encodeURI(url);
|
|
|
+ innerAudioContext.play();
|
|
|
+ },
|
|
|
+
|
|
|
+ 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)
|
|
|
+ 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 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
|
|
|
- }
|
|
|
+ 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;
|
|
|
- })
|
|
|
+ //每个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,
|
|
|
+ },
|
|
|
+ });
|
|
|
|
|
|
- this.setData({
|
|
|
- classfiy,
|
|
|
- targetObj: {
|
|
|
- major:min.id
|
|
|
- }
|
|
|
- })
|
|
|
- })
|
|
|
- }).catch(()=>{
|
|
|
- wx.hideLoading()
|
|
|
- wx.showToast({
|
|
|
- title: '连接失败',
|
|
|
- icon: 'error'
|
|
|
+ this.data.audio_address[min.id] &&
|
|
|
+ this.playMusic(this.data.audio_address[min.id]);
|
|
|
+ });
|
|
|
})
|
|
|
- })
|
|
|
- })
|
|
|
+ .catch(() => {
|
|
|
+ wx.hideLoading();
|
|
|
+ wx.showToast({
|
|
|
+ title: "连接失败",
|
|
|
+ icon: "error",
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
},
|
|
|
-
|
|
|
+
|
|
|
stopBeaconDiscovery() {
|
|
|
wx.showLoading({
|
|
|
- mask:true,
|
|
|
- title: '正在取消连接,请稍等',
|
|
|
- })
|
|
|
+ mask: true,
|
|
|
+ title: "正在取消连接,请稍等",
|
|
|
+ });
|
|
|
wx.stopBeaconDiscovery({
|
|
|
- success:()=>{
|
|
|
- wx.hideLoading()
|
|
|
+ success: () => {
|
|
|
+ wx.hideLoading();
|
|
|
wx.showToast({
|
|
|
- title: '取消连接成功',
|
|
|
- icon: 'success'
|
|
|
- })
|
|
|
+ title: "取消连接成功",
|
|
|
+ icon: "success",
|
|
|
+ });
|
|
|
innerAudioContext.stop();
|
|
|
this.setData({
|
|
|
- status: '0',
|
|
|
- targetObj: {}
|
|
|
- })
|
|
|
- },
|
|
|
- fail:()=>{
|
|
|
-
|
|
|
+ status: "0",
|
|
|
+ targetObj: {},
|
|
|
+ });
|
|
|
},
|
|
|
- complete:()=>{
|
|
|
-
|
|
|
- }
|
|
|
- })
|
|
|
+ fail: () => {},
|
|
|
+ complete: () => {},
|
|
|
+ });
|
|
|
},
|
|
|
// 扫一扫
|
|
|
toScanCode() {
|
|
|
- var that = this;
|
|
|
- that.setData({
|
|
|
- isScanPlay: true
|
|
|
- })
|
|
|
+ this.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();
|
|
|
+ onlyFromCamera: true,
|
|
|
+ success: (res) => {
|
|
|
+ this.setData({ targetObj: {} });
|
|
|
+ setTimeout(() => {
|
|
|
+ this.playMusic(res["result"])
|
|
|
+ }, 800);
|
|
|
},
|
|
|
- fail: function (res) {
|
|
|
- console.log('fail innerAudioContext', innerAudioContext)
|
|
|
- that.setData({
|
|
|
- isScanPlay: false
|
|
|
- })
|
|
|
- innerAudioContext.play();
|
|
|
- return;
|
|
|
+ fail: () => {
|
|
|
+ wx.showToast({
|
|
|
+ title: "二维码识别失败",
|
|
|
+ icon: "error",
|
|
|
+ });
|
|
|
},
|
|
|
- complete(){
|
|
|
- // console.log()
|
|
|
- that.setData({
|
|
|
- isScanPlay: false
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
+ complete: () => {
|
|
|
+ this.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}`
|
|
|
- })
|
|
|
+ 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
|
|
|
- })
|
|
|
- })
|
|
|
- }
|
|
|
+ audio_address: target,
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
},
|
|
|
- lifetimes:{
|
|
|
+ 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"})
|
|
|
- }
|
|
|
- }
|
|
|
-})
|
|
|
+ wx.stopBeaconDiscovery({});
|
|
|
+ this.setData({ status: "0" });
|
|
|
+ },
|
|
|
+ },
|
|
|
+});
|