You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Service启动的子线程中创建MediaPlayer出现create方法无法解析错误求助

问题解决

根因定位

你遇到的编译报错和Context参数完全无关,报错的核心原因是 MediaPlayer.create() 没有接收short[]类型作为第二个参数的重载,你传入的AudioData为短整型数组,IDE无法匹配到对应方法签名,才会误报第一个参数存在问题。

官方MediaPlayer.create()支持的参数类型

所有合法的重载第二个参数仅支持以下两类输入:

  • 本地/网络音频资源的Uri:create(Context context, Uri uri)
  • App内置raw资源的ID:create(Context context, int resId)
    其余带Surface、AudioAttributes的扩展重载,同样不支持short[]类型的输入。

解决方案:用AudioTrack播放PCM短整型数组

如果你的AudioData是裸PCM音频数据,直接用AudioTrack实现播放即可,参考代码如下:

// 替换为你实际音频对应的参数
int sampleRate = 44100; // 采样率
int channelConfig = AudioFormat.CHANNEL_OUT_MONO; // 单声道,立体声改为CHANNEL_OUT_STEREO
int audioFormat = AudioFormat.ENCODING_PCM_16BIT; // 对应short类型的16位PCM
int bufferSize = AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat);

// 初始化AudioTrack
AudioTrack audioTrack = new AudioTrack(
    AudioManager.STREAM_MUSIC,
    sampleRate,
    channelConfig,
    audioFormat,
    bufferSize,
    AudioTrack.MODE_STREAM
);

// 播放逻辑
audioTrack.play();
audioTrack.write(AudioData, 0, AudioData.length);

// 播放结束后释放资源
audioTrack.stop();
audioTrack.release();

额外注意事项

  • 无需单独创建新的Service,当前架构只要替换正确的音频播放API即可正常运行
  • 建议在Service的onDestroy回调中主动终止工作线程、释放音频播放资源,避免出现内存泄漏、音频设备占用的问题

内容的提问来源于stack exchange,提问作者user12628549

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:24:04