当前位置: 首页 > 知识库问答 >
问题:

Android-一些设备不通过耳机播放音频

葛泳
2023-03-14

在某些Android设备中尝试在听筒上播放音频文件时似乎存在问题。预期的行为是它应该在听筒中播放音频文件,但在某些设备中,如三星Galaxy Note 2(Android版本4.4.2)和Sony Xperia XA(Android版本6.0),它通过扬声器播放它们。

然而,在摩托罗拉moto g(Android版本6.0)和nexus 5X(Android版本7.0)等设备中,它工作正常。

该应用程序还具有android.permission.MODIFY_AUDIO_SETTINGS权限。

请在下面找到这个问题的详细信息。

在播放音频之前,我设置了以下属性:

audioManager = (AudioManager)configService.getContext().getSystemService(Context.AUDIO_SERVICE);
audioManager.setSpeakerphoneOn(isEnabled);
player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
player.setDataSource(path);

我尝试过将mode设置为mode_IN_CALL,但也没有成功:audioManager.setMode(android.media.audiomanage.mode_ IN_CALL)

我也尝试过其他帖子提出的类似问题的解决方案,但没有多大帮助。

了解此问题是否是特定于设备的,以及如何解决此问题,将非常有帮助。谢谢你的帮助。


共有2个答案

洪研
2023-03-14

我一直在使用ACTION_HEADSET_PLUG但在某些设备上通过听筒播放声音时遇到了同样的问题 6.0 。我的解决方案是将AudioAttributes用于版本高于LOLLIPOP的设备

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        AudioAttributes mAttributes = new AudioAttributes.Builder()
                .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
                .build();
        mMediaPlayer = MediaPlayer.create(this, R.raw.connection, mAttributes, 1);
    } else {
        mMediaPlayer = MediaPlayer.create(this, R.raw.connection);
    }
邹桐
2023-03-14

我终于找到了解决办法。当注册intent ACTION_HEADSET_PLUG-in BroadcastReceiver时,它正在广播从过去事件中保存的耳机拔出事件的粘性意图。这导致回调触发,仅通过扬声器播放音频。

请参考下面的堆栈溢出帖子了解更多详细信息:链接

为了解决这个问题,我使用了isInitialStickyBroadcast()方法来过滤过去的事件。

public void onReceive(Context context, Intent intent) {
    switch (intent.getIntExtra("state", -1)) {
        case 0:
            if (!isInitialStickyBroadcast()) {
                // headset unplugged
            }
            break;
        case 1: 
            // headset plugged in
            break;
        default:
            break;
    }
}
 类似资料:
  • 是否可以通过Android设备的手机扬声器播放音频?手机内部较小的扬声器,可产生低音量声音,只有在将耳朵贴在电话上时才能听到。 希望我的描述足够清楚,可以理解我的问题。 如果可能的话,一个如何实现这一点的例子将非常有帮助。 目前我正在使用下面的代码初始化我的MediaPlayer。

  • 我想用插入式耳机通过扬声器播放音频文件。 但我得到了 IllegalStateException 有什么想法可以解决这个问题吗?

  • 在我的应用程序中,有一个使用设备音频插孔的读卡器。现在,我的问题是,当读卡器在设备的耳机插孔中完好无损时,我想从内置扬声器中发出声音。 以下是我尝试过的代码: 1) 使用反射方法 2)使用setMode方法 但这两种代码仅在具有默认FM应用程序的设备中运行。但我想在所有设备中都具有此功能。 请分享你的经验!!

  • 我正在尝试从与Android设备配对的蓝牙耳机中捕获音频。 以下是相关代码: 清单要求权限: WRITE_EXTERNAL_STORAGE RECORD_AUDIO 互联网 MODIFY_AUDIO_SETTINGS BROADCAST_STICKY 蓝牙 BLUETOOTH_ADMIN 每个应用程序的典型过滤LogCat输出是: 初始化BT 启动蓝牙 BT可以从麦克风录音吗?true 一切初始化

  • 我试图在Android上使用ExoPlayer创建一个流媒体应用程序。大多数的流工作良好,只有一些他们不播放声音,在某些设备上只。 这是问题吗?如果我必须从头开始构建扩展,是否可以在Windows中完成?在我的PC上安装Linux有点问题。并且有没有任何教程来做它正确,根据我的流信息? ExoPlayer是一个很棒的媒体播放器,但是它确实缺乏文档(或者很难找到)。

  • 问题的标题可能看起来重复,但我的问题有时是一个问题,会导致故障。当插入耳机时,我使用以下代码通过扬声器播放。 上面的代码以以下方式播放音频:1.很少时候,它可以完美播放。2.大多数时候,它在背景中播放循环声音。3.很少时候,它什么都不播放。 插入耳机时,系统声音播放似乎没有错误。例如-设置铃声正确播放相应的铃声,没有任何故障。请帮助我了解如何在插入耳机的情况下通过扬声器正确播放声音。