fix(ios audio): force speaker over connected Bluetooth by dropping BT category options
overrideOutputAudioPort(.speaker) alone can't beat a connected BT headset (BT is higher priority), so 'Speaker' snapped back to BT. Now setSpeaker(true) sets category options [.defaultToSpeaker] (no allowBluetooth) so BT isn't an eligible output and the speaker wins; setSpeaker(false) restores [.allowBluetooth,.allowBluetoothA2DP] and uses the default port (routes to the headset). Observer re-holds speaker if a BT connect steals it. Adds a TEMP web probe (nroute/sptap) to verify from telemetry. plugin v1.1.1, web batch149. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1158,7 +1158,7 @@
|
||||
</head>
|
||||
<body>
|
||||
<script src="/icons.js?v=6"></script>
|
||||
<script>window.__BUILD='2026-07-21-batch148';console.log('%cBiz Connect','color:#1F3B73;font-weight:bold','build '+window.__BUILD);
|
||||
<script>window.__BUILD='2026-07-22-batch149';console.log('%cBiz Connect','color:#1F3B73;font-weight:bold','build '+window.__BUILD);
|
||||
// Emoji are rendered with the OS's own (colour) emoji font — instant, zero network.
|
||||
//
|
||||
// We used to run Twemoji over every emoji, which swapped each one for an <img> pulled INDIVIDUALLY from
|
||||
@@ -4456,6 +4456,7 @@ function bzInitNativeRoute(){
|
||||
function bzOnNativeRoute(output){
|
||||
if(!output) return;
|
||||
_nativeOutput=output;
|
||||
if(window.bzDbg) window.bzDbg('nroute',{out:output, want:meetRoute}); // TEMP verify speaker-over-BT (remove after confirm)
|
||||
meetRoute = (output==='bluetooth'||output==='wired') ? 'bt' : (output==='speaker' ? 'speaker' : meetRoute);
|
||||
refreshSpkBtn();
|
||||
}
|
||||
@@ -4567,6 +4568,7 @@ async function toggleSpeakerphone(){
|
||||
const i=routes.indexOf(cur);
|
||||
meetRoute=routes[(i<0?0:(i+1)%routes.length)];
|
||||
try{ localStorage.setItem('bzc_route', meetRoute); }catch(_){}
|
||||
if(window.bzDbg) window.bzDbg('sptap',{route:meetRoute, ios:ios, nout:_nativeOutput}); // TEMP verify toggle (remove after confirm)
|
||||
bzApplyRoute(meetRoute); // iOS native: switch loudspeaker<->default port via AVAudioSession (setSinkId below is a no-op there)
|
||||
if(!ios){
|
||||
if(meetRoute==='bt' && bt) await setSpeakerDevice(bt.deviceId);
|
||||
|
||||
Reference in New Issue
Block a user