我正在创建Media Player,但绝对不能在Speaker上播放。如果没有耳机插孔或蓝牙,仍然不能通过扬声器播放音频。
我在Android API以下使用,但仍可以在扬声器上播放
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setSpeakerphoneOn(false);
答案 0 :(得分:0)
您可以使用广播接收器使用此链接http://blog.urvatechlabs.com/detect-programatically-if-headphone-or-bluetooth-headsets-attached-with-android-phone/来检查是否已连接蓝牙和耳机。如果未连接/删除,请暂停/停止Android Media Player。
答案 1 :(得分:0)
摘自AudioManager官方文档
audioManager.setSpeakerphoneOn(boolean)
打开或关闭扬声器。
这意味着如果设置为false,则将禁用扬声器声音,即从扬声器播放,如果设置为true,则将从扬声器播放。
在您的情况下,您不想从外部扬声器播放音乐,但仍使用am.setSpeakerphoneOn(true);
来启用外部扬声器。
如此set am.setSpeakerphoneOn(false);
,使其不会播放来自外部扬声器的音乐
您还可以为AudioManager设置模式(通话/语音通讯/音乐等)
audioManager.setMode(AudioManager.STREAM_MUSIC);
注意::要更改音频管理器设置,您需要在清单中设置Permission: MODIFY_AUDIO_SETTINGS
将此行添加到清单中
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
此外,这是用于检查哪种音频连接类型的代码
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
PackageManager packageManager = getPackageManager();
if (audioManager.isBluetoothA2dpOn()) {
// Adjust output for Bluetooth.
Log.d("debug","BluetoothA2dpOn");
} else if (audioManager.isBluetoothScoOn()) {
// Adjust output for Bluetooth of sco.
Log.d("debug","BluetoothScoOn");
} else if (audioManager.isWiredHeadsetOn()) {
// Adjust output for headsets
Log.d("debug","WiredHeadsetOn");
} else if (audioManager.isSpeakerphoneOn()) {
// Adjust output for Speakerphone.
Log.d("debug","SpeakerphoneOn");
} else if (packageManager.hasSystemFeature(PackageManager.FEATURE_AUDIO_OUTPUT)) {
// Has internal speaker or other form of audio output.
Log.d("debug","Internal Speaker On");
} else {
// No device for audio output.
Log.d("debug","No Audio Device");
}