【问题标题】:How can I play a mp3 without download from the url? [closed]如何在不从 url 下载的情况下播放 mp3? [关闭]
【发布时间】:2012-01-19 03:29:18
【问题描述】:

我想开发如下但是我没有找到好的例子:

我想在不下载 url 中的 mp3 编码的情况下播放。 除非用户停止它,否则 mp3 应该在后台播放。 我想我会同时处理多项任务。

请提供示例文档或任何建议。 谢谢。

【问题讨论】:

  • 非常广泛的问题。如果 mp3 时长 3 分钟但下载需要 4 分钟,会发生什么?
  • 我不想下载 mp3,我需要从 url 播放。

标签: android mp3


【解决方案1】:
public class PlayAudioManager {
    private static MediaPlayer mediaPlayer;

public static void playAudio(final Context context, final String url) throws Exception {
    if (mediaPlayer == null) {
        mediaPlayer = MediaPlayer.create(context, Uri.parse(url));
    }
    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            killMediaPlayer();
        }
    });
    mediaPlayer.start();
}

private static void killMediaPlayer() {
    if (mediaPlayer != null) {
        try {
            mediaPlayer.reset();
            mediaPlayer.release();
            mediaPlayer = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
}

在您的活动中,例如,只需调用 PlayAudioManager.playAudio(context, http://dict.youdao.com/dictvoice?audio=good&type=1)

【讨论】:

  • 请发表一个小故事,解释你在这里做了什么。仅仅因为问题含糊不清并不意味着您也应该如此。
  • @MadPhysicist 我已经编辑了我的答案,它对我有用。
  • 你的代码没问题。我的评论是指您没有任何解释的事实。
【解决方案2】:
if (!isPlaying)
        {
            isPlaying = true;

            mp = new MediaPlayer();

            try {

                mp.reset(); // new one

                mp.setDataSource(AudioPlayer.this, myUri);

                //mp.prepareAsync();

                mp.setAudioStreamType(AudioManager.STREAM_MUSIC);

                mp.prepare(); // don't use prepareAsync for mp3 playback

                mp.start();

                // String songTitle = songsList.get(songIndex).get("songTitle");
                   // songTitleLabel.setText(songTitle);

                songProgressBar.setProgress(0);
                songProgressBar.setMax(100);

                // Updating progress bar
                updateProgressBar();

            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        else
        {
            isPlaying = false; 

            mp.release();// stop Playing 

            //mp = null;
        }

我已经在我的 MediaPlayer 中使用了它,它正在工作..不需要下载它..

【讨论】:

  • 在哪里将 url 转换为 myUri?
【解决方案3】:

执行此操作的简单方法 ::

MediaPlayer mp = new MediaPlayer();
 mp.setDataSource(PATH_TO_FILE);
 mp.prepare();
 mp.start();

【讨论】:

    【解决方案4】:

    你可以使用 MediaPlayer.create(context, uri); 传递你想要播放歌曲的上下文(this)和 uri

    【讨论】:

      【解决方案5】:

      看看这两个教程,在这些.mp3文件是通过web url播放的,

      Example of streaming mp3 mediafile from URL with Android MediaPlayer class

      Play Mp3 file from a Url

      另外,如果你想在后台播放 .mp3 文件,我认为你必须使用 Service 和 AIDL,

      查看基本的 Android 音乐播放器演示 MusicDroid - Audio Player Part II,它描述了如何为您的音频播放器使用服务和 AIDl。

      谢谢..

      【讨论】:

      • 媒体播放器是否缓存setDataSource(Context context, Uri uri)设置的文件?我想确保在初始下载后不会执行新的获取请求
      猜你喜欢
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多