為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴
發(fā)表日期:2019-11 文章編輯:小燈 瀏覽次數(shù):4859
小程序重構(gòu),采用 uniapp 框架。記錄一下踩過的坑。關(guān)于用戶拒絕再次調(diào)起授權(quán),及如何識(shí)別語(yǔ)音識(shí)別、微信地址、附近地址的處理。
...
"mp-weixin": {
...
"plugins" : {
// 語(yǔ)音識(shí)別 - 同聲傳譯
"WechatSI" : {
"version" : "0.3.1",
"provider" : "wx069ba97219f66d99"
}
}
}
<template>
<view @click="asrStart">語(yǔ)音識(shí)別</view>
<view>{{arsRes}}</view>
<!-- 語(yǔ)音識(shí)別 -->
<wechat-asr ref="weixinAsr" @callback="asrResult"/>
</template>
<script>
import WechatAsr from '@/components/wechatASR.vue';
export default {
components: {WechatAsr},
data () {
return {
arsRes: ''
}
},
methods: {
// 語(yǔ)音識(shí)別
asrStart () {
this.$refs.weixinAsr.show();
},
asrResult (res) {
this.arsRes = res;
}
}
}
</script>
<template>
<!-- 微信語(yǔ)音識(shí)別 -->
<view class="mask" v-show="isShow">
<view class="weixin-asr">
<view class="title">語(yǔ)音識(shí)別</view>
<!-- 動(dòng)畫 -->
<view class="spinner">
<view class="rect rect1"></view>
<view class="rect rect2"></view>
<view class="rect rect3"></view>
<view class="rect rect4"></view>
<view class="rect rect5"></view>
</view>
<view class="tip">說出姓名、電話和詳細(xì)地址</view>
<button class="btn" type="default" @click="recordStop">說完了</button>
</view>
</view>
</template>
<script>
const WechatSI = requirePlugin("WechatSI");
const ASRManager = WechatSI.getRecordRecognitionManager();
export default {
data () {
return {
isShow: false
}
},
onReady () {
// 錄音開啟成功回調(diào)
ASRManager.onStart = function (res) {
_this.isShow = true;
}
const _this = this;
// 識(shí)別錯(cuò)誤事件
ASRManager.onError = (res) => {
_this.isShow = false;
console.log(res.msg);
}
// 錄音停止回調(diào)
ASRManager.onStop = function (res) {
if (res && res.result) {
_this.$emit('callback', res.result);
} else {
uni.showToast({
icon: 'none',
title: '抱歉,沒聽到您的聲音哦'
})
}
}
},
methods: {
data () {
return {
isShow: false,
}
},
show () {
const _this = this;
// 獲取是否授權(quán)信息
uni.getSetting({
success(res) {
if (res && res.authSetting && res.authSetting.hasOwnProperty('scope.record')) {
if (res.authSetting['scope.record']) {
start();
} else { // 拒絕授權(quán),打開授權(quán)設(shè)置
uni.openSetting({
success() {
start();
}
})
}
} else {
start();
}
}
})
function start () {
ASRManager.start({
lang: "zh_CN"
});
}
},
// 錄音停止
recordStop () {
this.isShow = false;
ASRManager.stop();
}
}
}
</script>
<style lang="scss" scoped>
.mask {
position: fixed;
top: 0;
left: 0;
z-index: 300;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, .54);
}
.weixin-asr {
position: absolute;
top: calc(50% - #{477upx / 2});
left: 0;
right: 0;
margin: 0 auto;
width: 560upx;
height: 477upx;
background: #fff;
text-align: center;
transform: .5s ease-out .5s;
.title {
margin-top: 42upx;
color: #000;
font-size: 34upx;
font-weight: 500;
}
.spinner {
margin: 50upx;
height: 100upx;
}
.tip {
color: #787878;
}
.btn {
margin-top: 28upx;
width: 225upx;
height: 82upx;
background: $theme1;
color: #fff;
font-size: 34upx;
line-height: 82upx;
border-radius: 82upx;
}
}
.spinner {
text-align: center;
}
.spinner > .rect {
background-color: #EDAA35;
height: 100%;
border-radius: 13upx;
width: 13upx;
display: inline-block;
-webkit-animation: stretchdelay 1.2s infinite ease-in-out;
animation: stretchdelay 1.2s infinite ease-in-out;
& + .rect {
margin-left: 15upx;
}
}
.spinner .rect2 {
-webkit-animation-delay: -1.1s;
animation-delay: -1.1s;
}
.spinner .rect3 {
-webkit-animation-delay: -1.0s;
animation-delay: -1.0s;
}
.spinner .rect4 {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s;
}
.spinner .rect5 {
-webkit-animation-delay: -0.8s;
animation-delay: -0.8s;
}
@-webkit-keyframes stretchdelay {
0%, 40%, 100% { -webkit-transform: scaleY(0.4) }
20% { -webkit-transform: scaleY(1.0) }
}
@keyframes stretchdelay {
0%, 40%, 100% {
transform: scaleY(0.4);
-webkit-transform: scaleY(0.4);
} 20% {
transform: scaleY(1.0);
-webkit-transform: scaleY(1.0);
}
}
</style>
它們的處理,和上面邏輯一樣,只是調(diào)用的 api 不一樣。
邏輯也是先獲取授權(quán)信息,未授權(quán)、用戶拒絕授權(quán)、授權(quán)成功,在用戶拒絕授權(quán)時(shí),打開授權(quán)設(shè)置頁(yè)面,沒授權(quán)由小程序主動(dòng)調(diào)起授權(quán)彈窗。
主要處理邏輯如下:
chooseAddress (type) {
const _this = this;
if (type === 'weixin') {
// 處理拒絕再次打開調(diào)用設(shè)置
uni.getSetting({
success (res) {
if (res && res.authSetting && res.authSetting.hasOwnProperty('scope.address')) {
if (res.authSetting['scope.address']) {
choose();
} else {
uni.openSetting({
success () {
choose();
}
})
}
} else {
choose();
}
}
});
function choose () {
uni.chooseAddress({
success(res) {
if (res) {
// 調(diào)用接口將省市區(qū)轉(zhuǎn)換成項(xiàng)目需要的,帶id的,然后進(jìn)行后續(xù)處理
}
}
})
}
}
}
nearAddress () {
const _this = this;
// 處理拒絕再次打開調(diào)用設(shè)置
uni.getSetting({
success (res) {
if (res && res.authSetting && res.authSetting.hasOwnProperty('scope.userLocation')) {
if (res.authSetting['scope.userLocation']) {
chooseLocation();
} else {
uni.openSetting({
success () {
chooseLocation();
}
})
}
} else {
chooseLocation();
}
}
})
function chooseLocation () {
uni.chooseLocation({
success: function (res) {
if (res) {
// 調(diào)用接口將省市區(qū)轉(zhuǎn)換成項(xiàng)目需要的,帶id的,然后進(jìn)行后續(xù)處理
}
}
});
}
}
日期:2019-11 瀏覽次數(shù):5528
日期:2019-11 瀏覽次數(shù):11984
日期:2019-11 瀏覽次數(shù):4353
日期:2019-11 瀏覽次數(shù):5388
日期:2019-11 瀏覽次數(shù):5261
日期:2019-11 瀏覽次數(shù):7183
日期:2019-11 瀏覽次數(shù):5166
日期:2019-11 瀏覽次數(shù):15770
日期:2019-11 瀏覽次數(shù):4721
日期:2019-11 瀏覽次數(shù):6520
日期:2019-11 瀏覽次數(shù):5374
日期:2019-11 瀏覽次數(shù):4565
日期:2019-11 瀏覽次數(shù):10764
日期:2019-11 瀏覽次數(shù):8321
日期:2019-11 瀏覽次數(shù):5081
日期:2019-11 瀏覽次數(shù):4314
日期:2019-11 瀏覽次數(shù):8955
日期:2019-11 瀏覽次數(shù):4650
日期:2019-11 瀏覽次數(shù):4847
日期:2019-11 瀏覽次數(shù):4867
日期:2019-11 瀏覽次數(shù):4480
日期:2019-11 瀏覽次數(shù):5028
日期:2019-11 瀏覽次數(shù):10284
日期:2019-11 瀏覽次數(shù):5461
日期:2019-11 瀏覽次數(shù):5438
日期:2019-11 瀏覽次數(shù):4887
日期:2019-11 瀏覽次數(shù):12333
日期:2019-11 瀏覽次數(shù):7356
日期:2019-11 瀏覽次數(shù):7905
日期:2019-11 瀏覽次數(shù):4858
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.