Android - 如何确定是否连接了外部扬声器

标签 android audio bluetooth

我只想在应用程序中播放不通过手机内置扬声器播放的声音。为此,我假设我需要查明是否连接了外部扬声器(有线扬声器、蓝牙耳机、有线耳机等)。

我看到 AudioManager.isWiredHeadsetOn() 已被弃用但仍然有效,但这仅表明已插入有线耳机。蓝牙是否有类似的选项?这会涵盖所有可能的音频选项吗?

相反,如果有办法告诉声音将通过内置扬声器传送,那可能同样有效。

最佳答案

public static boolean isWiredHeadsetConnected() {    
        AudioManager mAudioMgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
        if(mAudioMgr.isWiredHeadsetOn()){

                 mAudioMgr.setWiredHeadsetOn(false);
                 mAudioMgr.setSpeakerphoneOn(true);
                 mAudioMgr.setMode(AudioManager.MODE_IN_COMMUNICATION);

                 Toast.makeText(getApplicationContext(), "SpeakerPhone On", Toast.LENGTH_LONG).show();
          }
}

有一个检测是否插入或拔出的 Intent :ACTION_HEADSET_PLUG。所以,你必须添加它。

public static boolean isBluetoothHeadsetConnected() {
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()
            && mBluetoothAdapter.getProfileConnectionState(BluetoothHeadset.HEADSET) == BluetoothHeadset.STATE_CONNECTED;
} 

蓝牙权限:

<uses-permission android:name="android.permission.BLUETOOTH" />

关于Android - 如何确定是否连接了外部扬声器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46137086/

相关文章:

java - 尝试获取在android中绘制的每个随机圆的x,y坐标

android - 如何滑动和滚动到 Appium 中的最后一个

c# - 从视频中获得声音效果

android - 为 Android 编译的 Lame MP3 编码器

java - 在android中创建一个管理文件的类的建议

android - 使用Firebase实时数据库

android - TTS语音识别

android - 如何拦截蓝牙耳机的通话按钮?

java - 通过蓝牙将字符串从作为客户端的 PC 发送到作为服务器的移动设备

android - 如何在Android中使用蓝牙访问另一部手机的文件系统?