uni-app 音频切换蓝牙没声音 手机内所有应用也跟着切换音频
uni-app 音频切换蓝牙没声音 手机内所有应用也跟着切换音频
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| HBuilderX | 3.1.22 | 云端 |
产品分类:HTML5+
手机系统:Android
手机系统版本号:Android 11
手机厂商:华为
手机机型:荣耀x10
示例代码:
if ( plus.audio == undefined ) {
// alert( "Device not ready!" );
}
var p = plus.audio.createPlayer(bofang_path);
if(bofangwey ==1){
p.setRoute(plus.audio.ROUTE_SPEAKER);
}else{
p.setRoute( plus.audio.ROUTE_EARPIECE );
}
p.play( function () {
}, function ( e ) {
} );
操作步骤:
if ( plus.audio == undefined ) {
// alert( "Device not ready!" );
}
var p = plus.audio.createPlayer(bofang_path);
if(bofangwey ==1){
p.setRoute(plus.audio.ROUTE_SPEAKER);
}else{
p.setRoute( plus.audio.ROUTE_EARPIECE );
}
p.play( function () {
}, function ( e ) {
} );
预期结果:
if ( plus.audio == undefined ) {
// alert( "Device not ready!" );
}
var p = plus.audio.createPlayer(bofang_path);
if(bofangwey ==1){
p.setRoute(plus.audio.ROUTE_SPEAKER);
}else{
p.setRoute( plus.audio.ROUTE_EARPIECE );
}
p.play( function () {
}, function ( e ) {
} );
实际结果:
if ( plus.audio == undefined ) {
// alert( "Device not ready!" );
}
var p = plus.audio.createPlayer(bofang_path);
if(bofangwey ==1){
p.setRoute(plus.audio.ROUTE_SPEAKER);
}else{
p.setRoute( plus.audio.ROUTE_EARPIECE );
}
p.play( function () {
}, function ( e ) {
} );
更多关于uni-app 音频切换蓝牙没声音 手机内所有应用也跟着切换音频的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app 音频切换蓝牙没声音 手机内所有应用也跟着切换音频的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个问题是由于Android系统(特别是华为/荣耀设备)的音频路由策略导致的。当使用plus.audio.setRoute()强制切换音频输出设备时,系统可能会全局改变音频路由,影响所有应用。
原因分析:
- Android系统的音频路由管理是全局性的,
ROUTE_SPEAKER和ROUTE_EARPIECE的切换会改变系统默认的音频输出通道 - 华为/荣耀设备对音频路由有更严格的控制策略
- 蓝牙设备连接时,系统优先将音频路由到蓝牙设备
解决方案:
- 使用Web Audio API替代(推荐)
// 创建AudioContext
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
const source = audioContext.createMediaElementSource(audioElement);
source.connect(audioContext.destination);
- 检查蓝牙连接状态
// 在播放前检查蓝牙状态
plus.bluetooth.getState(function(state) {
if(state === 'connected') {
// 蓝牙已连接,提示用户
uni.showToast({
title: '请断开蓝牙设备',
icon: 'none'
});
}
});
- 延迟播放设置
// 先创建播放器,稍后再设置路由
var p = plus.audio.createPlayer(bofang_path);
setTimeout(() => {
if(bofangwey == 1) {
p.setRoute(plus.audio.ROUTE_SPEAKER);
} else {
p.setRoute(plus.audio.ROUTE_EARPIECE);
}
p.play();
}, 100);
- 使用uni-app的音频API
// uni-app自带的音频API对路由处理更好
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.src = bofang_path;
innerAudioContext.play();
- 添加权限声明 在manifest.json中添加:
{
"permissions": {
"Audio": {
"description": "音频播放"
}
}
}

