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
相关产品推荐
相关产品推荐

