如何在 android 中设置默认模式耳机
How to set default mode headset in android
我正在开发 VoIP 应用程序,当用户拔下耳机然后设备自动切换到扬声器时出现问题,但我希望设备切换到普通扬声器。有什么办法可以把它改成普通喇叭吗?
要以编程方式打开听筒,试试这个:
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
private void useEarpiece() {
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(false);
}
检查您的权限:
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
捕捉事件:
private class HeadSetReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
int state = intent.getIntExtra("state", -1);
switch (state) {
case 0:
// Headset unplugged
break;
case 1:
// Headset plugged in
break;
}
}
}
}
棘手的东西,尤其是多台设备,不同的场景。
我曾开发过一个 VoIP 应用程序,这就是我所知道的。您面临的可能是因为在请求焦点后正在手动处理音频管理器模式和/或流。您需要做的是将控制权转移到呼叫流,以便在您的呼叫开启时,
o.s.
自动处理耳机的连接和断开、传输到 phone 听筒等
您可能正在做所有这些或组合...
使用AudioManager {.setMode(int mode)} - use MODE_IN_COMMUNICATION, recommended for VoIP or MODE_IN_CALL
此外,检查 STREAM_VOICE_CALL
你在用吗
- isSpeakerphoneOn() and setSpeakerphoneOn(boolean)
- isBluetoothScoOn(), setBluetoothScoOn(boolean) ?
将需要解决所有这些问题以解决设备或耳机型号的特定问题。
有用的东西:
Even if a SCO connection is established, the following restrictions
apply on audio output streams so that they can be routed to SCO
headset:
- the stream type must be STREAM_VOICE_CALL
- the format must be mono
- the sampling must be 16kHz or 8kHz
我正在开发 VoIP 应用程序,当用户拔下耳机然后设备自动切换到扬声器时出现问题,但我希望设备切换到普通扬声器。有什么办法可以把它改成普通喇叭吗?
要以编程方式打开听筒,试试这个:
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
private void useEarpiece() {
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(false);
}
检查您的权限:
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
捕捉事件:
private class HeadSetReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
int state = intent.getIntExtra("state", -1);
switch (state) {
case 0:
// Headset unplugged
break;
case 1:
// Headset plugged in
break;
}
}
}
}
棘手的东西,尤其是多台设备,不同的场景。
我曾开发过一个 VoIP 应用程序,这就是我所知道的。您面临的可能是因为在请求焦点后正在手动处理音频管理器模式和/或流。您需要做的是将控制权转移到呼叫流,以便在您的呼叫开启时,
o.s.
您可能正在做所有这些或组合...
使用AudioManager {.setMode(int mode)} - use MODE_IN_COMMUNICATION, recommended for VoIP or MODE_IN_CALL
此外,检查 STREAM_VOICE_CALL
你在用吗 - isSpeakerphoneOn() and setSpeakerphoneOn(boolean) - isBluetoothScoOn(), setBluetoothScoOn(boolean) ?
将需要解决所有这些问题以解决设备或耳机型号的特定问题。
有用的东西:
Even if a SCO connection is established, the following restrictions apply on audio output streams so that they can be routed to SCO headset:
- the stream type must be STREAM_VOICE_CALL
- the format must be mono
- the sampling must be 16kHz or 8kHz