我正在创建媒体播放器,但它永远不会在扬声器上播放。如果头戴式耳机插孔或蓝牙不可用,则不应通过扬声器播放静止音频。
我使用了下面的Android API,但它仍然可以通过扬声器播放:
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setSpeakerphoneOn(false);发布于 2019-02-22 14:14:31
您可以使用此链接http://blog.urvatechlabs.com/detect-programatically-if-headphone-or-bluetooth-headsets-attached-with-android-phone/使用广播接收器检查蓝牙和耳机是否连接。如果未连接/删除,请暂停/停止Android Media Player。
发布于 2019-02-22 14:40:42
来自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");
}https://stackoverflow.com/questions/54820781
复制相似问题