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

Android开发:如何传递音频路径字符串至另一Activity并通过Media Player播放

嘿,这事儿其实挺简单的,分两步就能搞定:把音频路径从源Activity传到目标Activity,然后在那边用MediaPlayer播放。我给你拆解下具体操作:

第一步:从源Activity传递音频路径

首先你需要从TextView里取出存储的音频路径,然后通过Intent把这个字符串传递给目标Activity。代码示例如下:

// 先获取TextView里的音频路径字符串
String audioFilePath = yourAudioPathTextView.getText().toString();

// 创建Intent,指定要跳转的目标Activity
Intent audioPlayIntent = new Intent(YourSourceActivity.this, AudioPlayActivity.class);
// 把路径存入Intent,用一个自定义的key(比如"AUDIO_FILE_PATH")来标识,方便后续取出
audioPlayIntent.putExtra("AUDIO_FILE_PATH", audioFilePath);
// 启动目标Activity
startActivity(audioPlayIntent);
第二步:在目标Activity接收路径并播放音频

接下来在目标Activity里,你需要从Intent中取出传递过来的路径,然后初始化MediaPlayer来播放音频。这里要注意异常处理和资源释放,避免出现问题:

首先在目标Activity的onCreate方法中接收路径:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_audio_play);

    // 从Intent中取出音频路径
    String receivedAudioPath = getIntent().getStringExtra("AUDIO_FILE_PATH");
    
    // 先检查路径是否有效,避免空指针或者无效路径导致崩溃
    if (receivedAudioPath != null && !receivedAudioPath.trim().isEmpty()) {
        // 调用播放方法
        startPlayingAudio(receivedAudioPath);
    } else {
        // 路径无效的话,可以给用户个提示
        Toast.makeText(this, "无法获取有效音频路径", Toast.LENGTH_SHORT).show();
    }
}

然后实现播放音频的方法:

private void startPlayingAudio(String audioPath) {
    MediaPlayer mediaPlayer = new MediaPlayer();
    try {
        // 设置音频文件的数据源
        mediaPlayer.setDataSource(audioPath);
        // 异步准备音频,避免阻塞主线程(如果用prepare()可能会导致ANR)
        mediaPlayer.prepareAsync();
        
        // 准备完成后开始播放
        mediaPlayer.setOnPreparedListener(mediaPlayer -> mediaPlayer.start());
        
        // 播放完成后记得释放MediaPlayer资源,避免内存泄漏
        mediaPlayer.setOnCompletionListener(mediaPlayer -> {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.stop();
            }
            mediaPlayer.release();
        });
    } catch (IOException e) {
        e.printStackTrace();
        // 播放出错时给用户提示
        Toast.makeText(this, "音频播放失败,请检查文件是否存在", Toast.LENGTH_SHORT).show();
        // 出错也要释放资源
        if (mediaPlayer != null) {
            mediaPlayer.release();
        }
    }
}
额外注意事项
  • 权限问题:如果音频文件在外部存储(比如SD卡),你需要确保App拥有读取外部存储的权限。Android 10及以上版本可以用MediaStore来访问文件,或者申请MANAGE_EXTERNAL_STORAGE权限(不过这个权限比较敏感,尽量用MediaStore);Android 9及以下需要申请READ_EXTERNAL_STORAGE权限。
  • 资源释放:除了播放完成后释放MediaPlayer,最好在Activity的onPause或者onDestroy方法中也检查并释放资源,比如:
@Override
protected void onDestroy() {
    super.onDestroy();
    if (mediaPlayer != null) {
        if (mediaPlayer.isPlaying()) {
            mediaPlayer.stop();
        }
        mediaPlayer.release();
        mediaPlayer = null;
    }
}
  • 路径有效性:最好在传递前先判断文件是否存在,可以用File类来检查:new File(audioFilePath).exists(),这样能提前避免无效路径的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:22:38