I have a Xamarin Forms application that is mostly a wrapper around a WebView control.
The website that is loaded in the webview uses camera and microphone to create a WebRTC connection and publish the streams to an audience.
The problem: I need to be able to distinguish between the audio input devices (built in and a pair of bluetooth headphones), but when I use navigator.mediaDevices.enumerateDevices
the devices labels are empty. This doesn't happen if I test the same on Chrome, on the same Android device.
Javascript code:
const d = await navigator.mediaDevices.enumerateDevices();
const onlyAudioInput = d.filter(dev => dev.kind === 'audioinput');
console.log(JSON.stringify(onlyAudioInput, null, 2));
Results in Chrome:
[
{
"deviceId": "default",
"kind": "audioinput",
"label": "Predefinito",
"groupId": "80e0a2604ac772db693ba33f23270e40c2b7db695715b5ebdbc9236d1fafb40e"
},
{
"deviceId": "cf91fa8f63053b85953819c7dab3d3e4b0841f8987fb75cd659393ac71e28ccb",
"kind": "audioinput",
"label": "Speakerphone",
"groupId": "669753e50fbfe47d0352684f9c603250b9f29a1d74fbf9595f08d3f2184e9aee"
},
{
"deviceId": "8e3a425e11a72a2c52553a7bb0b346d6041e561831d51ad3d014851c902933b6",
"kind": "audioinput",
"label": "Bluetooth headset",
"groupId": "45ecdacbcb6e7d1f88826258879cd19b8ba043dd08f7f1ca870321a5560b1417"
}
]
Results in webview:
[
{
"deviceId": "default",
"kind": "audioinput",
"label": "",
"groupId": "da6f8627bce414c9752cae16c9b7e889ab9a98b9c98bac7faab66543260f99a8"
},
{
"deviceId": "94cfdee91b7cc6e3ac947b6c2ed8b22b4cfb215cdc0606a591b24c8525f1ce5c",
"kind": "audioinput",
"label": "",
"groupId": "6b1bf6bec2004950fd4b1c0b8a17b80c4c4bd12e844e47dfcb8b0ef334564d3c"
},
{
"deviceId": "5219d4c6531a996c42d2314a059c3cb4ddb9ee8dac73edd61605072a8fdcbe69",
"kind": "audioinput",
"label": "",
"groupId": "bfccf39cee80d59c8f5f070f5d2b69dff123942665a787e3cb54780f1ac71536"
}
]
Is there anything I can do to get labels also in my WebView?