10000 Fix/issue for audio device switch (#1417) · azazadev/flutter-webrtc@e71f74d · GitHub
[go: up one dir, main page]

Skip to content

Commit e71f74d

Browse files
authored
Fix/issue for audio device switch (flutter-webrtc#1417)
* fix issue for audio switch. * update version for audioswitch.
1 parent 59caea8 commit e71f74d

File tree

3 files changed

+55
-18
lines changed

3 files changed

+55
-18
lines changed

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ android {
5353

5454
dependencies {
5555
implementation 'io.github.webrtc-sdk:android:114.5735.02'
56-
implementation 'com.github.davidliu:audioswitch:1689af118f69dcd8c8dc95e5a711dd0a7a626e69'
56+
implementation 'com.github.davidliu:audioswitch:7b55cec426227a75be25b0d7ad8537d4aede2a2a'
5757
implementation 'androidx.annotation:annotation:1.1.0'
5858
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
5959
}

android/src/main/java/com/cloudwebrtc/webrtc/GetUserMediaImpl.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@
8282
* complexity and to (somewhat) separate concerns.
8383
*/
8484
class GetUserMediaImpl {
85-
8685
private static final int DEFAULT_WIDTH = 1280;
8786
private static final int DEFAULT_HEIGHT = 720;
8887
private static final int DEFAULT_FPS = 30;

android/src/main/java/com/cloudwebrtc/webrtc/audio/AudioSwitchManager.java

Lines changed: 54 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import com.twilio.audioswitch.AudioSwitch;
1616

1717
import java.util.ArrayList;
18-
import java.util.Collections;
1918
import java.util.List;
2019
import java.util.Objects;
2120
import java.util.Map;
@@ -54,8 +53,6 @@ public class AudioSwitchManager {
5453
@Nullable
5554
private AudioSwitch audioSwitch;
5655

57-
private boolean _speakerphoneOn = false;
58-
5956
/**
6057
* The audio focus mode to use while started.
61 10000 58
*
@@ -105,7 +102,6 @@ public void start() {
105102
handler.postAtFrontOfQueue(() -> {
106103
if (!isActive) {
107104
Objects.requireNonNull(audioSwitch).activate();
108-
audioManager.setSpeakerphoneOn(_speakerphoneOn);
109105
isActive = true;
110106
}
111107
});
@@ -154,24 +150,66 @@ public void selectAudioOutput(@NonNull Class<? extends AudioDevice> audioDeviceC
154150
});
155151
}
156152

157-
public void enableSpeakerphone(boolean enable) {
158-
audioManager.setSpeakerphoneOn(enable);
159-
_speakerphoneOn = enable;
153+
private void updatePreferredDeviceList(boolean speakerOn) {
154+
preferredDeviceList = new ArrayList<>();
155+
preferredDeviceList.add(AudioDevice.BluetoothHeadset.class);
156+
preferredDeviceList.add(AudioDevice.WiredHeadset.class);
157+
if(speakerOn) {
158+
preferredDeviceList.add(AudioDevice.Speakerphone.class);
159+
preferredDeviceList.add(AudioDevice.Earpiece.class);
160+
} else {
161+
preferredDeviceList.add(AudioDevice.Earpiece.class);
162+
preferredDeviceList.add(AudioDevice.Speakerphone.class);
163+
}
164+
handler.post(() -> {
165+
Objects.requireNonNull(audioSwitch).setPreferredDeviceList(preferredDeviceList);
166+
});
160167
}
161168

162-
public void enableSpeakerButPreferBluetooth() {
163-
AudioDeviceInfo bluetoothDevice = null;
164-
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
165-
AudioDeviceInfo[] devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
166-
for (AudioDeviceInfo device : devices) {
167-
if (device.getType() == AudioDeviceInfo.TYPE_BLUETOOTH_SCO) {
168-
bluetoothDevice = device;
169+
public void enableSpeakerphone(boolean enable) {
170+
updatePreferredDeviceList(enable);
171+
if(enable) {
172+
selectAudioOutput(AudioDevice.Speakerphone.class);
173+
} else {
174+
List<AudioDevice> devices = availableAudioDevices();
175+
AudioDevice audioDevice = null;
176+
for (AudioDevice device : devices) {
177+
if (device.getClass().equals(AudioDevice.BluetoothHeadset.class)) {
178+
audioDevice = device;
179+
break;
180+
} else if(device.getClass().equals(AudioDevice.WiredHeadset.class)) {
181+
audioDevice = device;
182+
break;
183+
} else if(device.getClass().equals(AudioDevice.Earpiece.class)) {
184+
audioDevice = device;
169185
break;
170186
}
171187
}
188+
if (audioDevice != null) {
189+
selectAudioOutput(audioDevice.getClass());
190+
} else {
191+
handler.post(() -> {
192+
Objects.requireNonNull(audioSwitch).selectDevice(null);
193+
});
194+
}
195+
}
196+
}
197+
198+
public void enableSpeakerButPreferBluetooth() {
199+
List<AudioDevice> devices = availableAudioDevices();
200+
AudioDevice audioDevice = null;
201+
for (AudioDevice device : devices) {
202+
if (device.getClass().equals(AudioDevice.BluetoothHeadset.class)) {
203+
audioDevice = device;
204+
break;
205+
} else if(device.getClass().equals(AudioDevice.WiredHeadset.class)) {
206+
audioDevice = device;
207+
break;
208+
}
172209
}
173-
if (bluetoothDevice == null) {
174-
audioManager.setSpeakerphoneOn(_speakerphoneOn);
210+
211+
if (audioDevice == null) {
212+
selectAudioOutput(AudioDevice.Speakerphone.class);
175213
}
176214
}
177215

0 commit comments

Comments
 (0)

Footer

© 2025 GitHub, Inc.
0