You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity获取音频输出设备列表及实现播放设备切换的技术问询

Android端蓝牙/听筒切换

Android平台无需枚举所有扬声器,直接通过系统AudioManager和BluetoothAPI实现切换,步骤如下:

1. 配置权限

在Unity的Plugins/Android/AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />

Android 12+需动态申请BLUETOOTH_CONNECT权限,需额外处理权限申请逻辑。

2. 切换逻辑实现

用Unity的AndroidJavaClass调用原生API:

using UnityEngine;

public class AndroidAudioSwitcher : MonoBehaviour
{
    private AndroidJavaObject audioManager;
    private AndroidJavaObject bluetoothAdapter;

    void Start()
    {
        var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        var currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
        audioManager = currentActivity.Call<AndroidJavaObject>("getSystemService", "audio");
        
        var bluetoothClass = new AndroidJavaClass("android.bluetooth.BluetoothAdapter");
        bluetoothAdapter = bluetoothClass.GetStatic<AndroidJavaObject>("getDefaultAdapter");
    }

    /// <summary>切换到听筒</summary>
    public void SwitchToEarPiece()
    {
        audioManager.Call("setMode", 2); // MODE_IN_COMMUNICATION
        audioManager.Call("setSpeakerphoneOn", false);
    }

    /// <summary>切换到扬声器</summary>
    public void SwitchToSpeaker()
    {
        audioManager.Call("setMode", 0); // MODE_NORMAL
        audioManager.Call("setSpeakerphoneOn", true);
    }

    /// <summary>切换到蓝牙设备(需蓝牙已配对连接)</summary>
    public void SwitchToBluetooth()
    {
        if (bluetoothAdapter != null && bluetoothAdapter.Call<bool>("isEnabled"))
        {
            audioManager.Call("startBluetoothSco");
            audioManager.Call("setBluetoothScoOn", true);
            audioManager.Call("setMode", 2); // MODE_IN_COMMUNICATION
        }
        else
        {
            Debug.LogError("蓝牙未开启或无可用设备");
        }
    }
}

内容的提问来源于stack exchange,提问作者Selvaraj Balakrishnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 08:53:24