Android Studio中MediaPlayer调用无声音问题求助
音乐播放器无声音问题排查
先看你的代码:
MusicPlayer类:
class MusicPlayer(c: Context){ var context: Context = c private var player: MediaPlayer = MediaPlayer.create(context,R.raw.sth) fun start() { Log.d("Music", context.toString()) player.setOnPreparedListener(OnPreparedListener { Log.i( "Music", "player: $player" ) }) player.isLooping = false player.setVolume(1F, 1F) Log.d("Music", "START") player.start() Log.d("Music", "AFTER START") } }
MainActivity调用代码:
class MainActivity : AppCompatActivity(){ private lateinit var player: MusicPlayer override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) player = MusicPlayer(this) player.start() } }
针对无声音的问题,可以从以下几个方向排查:
配置正确的音频属性
API 26及以上版本,setAudioStreamType已被弃用,若未指定正确的AudioAttributes,系统可能无法正确路由音频输出。修改MusicPlayer的初始化逻辑:private var player: MediaPlayer = MediaPlayer.create(context,R.raw.sth).apply { val audioAttributes = AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) .build() setAudioAttributes(audioAttributes) }验证音频文件有效性
确认sth.mp3文件未损坏,且编码符合Android支持的MP3标准(如MPEG-1 Layer 3,比特率8-320kbps)。可以替换为一个已知能正常播放的MP3文件测试,排除文件本身的问题。检查设备/模拟器音频设置
- 确保运行模拟器的电脑音量未静音且处于合适大小,部分模拟器的音频输出依赖宿主机设置;
- 切换到真机测试,排除模拟器音频驱动bug;
- 在系统设置中确认媒体音量未被静音(部分设备会区分通话、媒体等不同音量通道)。
确认MediaPlayer状态
在start()方法中增加状态检查日志,确认播放器是否真的进入播放状态:fun start() { Log.d("Music", "Player prepared: ${player.isPrepared}") Log.d("Music", "Player playing before start: ${player.isPlaying}") // 原有代码... player.start() Log.d("Music", "Player playing after start: ${player.isPlaying}") }如果日志显示
isPlaying始终为false,说明播放器未成功初始化,可以增加空值判断:private var player: MediaPlayer? = MediaPlayer.create(context,R.raw.sth) fun start() { player ?: run { Log.e("Music", "MediaPlayer create failed") return } // 后续操作使用player!! }修正监听器设置时机
MediaPlayer.create()会直接完成prepare操作,之后设置OnPreparedListener不会触发回调。如果需要监听准备完成,应在创建播放器实例前设置,但更合理的方式是直接使用create返回的已准备好的实例。
内容的提问来源于stack exchange,提问作者zxcisnoias
相关产品推荐
相关产品推荐

