android播放url资源,如何从android中的URL播放音频文件?

这个博客讨论了如何在Android应用中实现从URL播放音频的功能。作者分享了一个音频播放器应用程序的代码片段,该应用程序目前能播放本地存储的音频文件。问题在于,作者需要修改代码以便播放列表中的URL音频。代码包括MediaPlayer的使用、按钮监听器以及进度条更新等,但尚未实现从URL加载和播放音频。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在开发一个音频播放器的应用程序。我想播放来自url的音频,我正在做代码,但它播放本地目录的音频,即原始文件夹。我想从播放列表中一次播放单个URL的歌曲,如何在doinbackground方法中实现代码来播放单个文件。在下面的代码中从url播放音频需要做些什么?建议我!如何从android中的URL播放音频文件?

public class RelaxationLvAudioPlayerActivity1 extends Activity implements SeekBar.OnSeekBarChangeListener {

private ImageButton btnPlay;

private ImageButton btnForward;

private ImageButton btnBackward;

private ImageButton btnNext;

private ImageButton btnPrevious;

private ImageButton btnPlaylist;

private ImageButton btnRepeat;

private ImageButton btnShuffle;

private SeekBar songProgressBar;

private TextView songTitleLabel;

private TextView songCurrentDurationLabel;

private TextView songTotalDurationLabel;

// Media Player

private MediaPlayer mp;

// Handler to update UI timer, progress bar etc,.

private Handler mHandler = new Handler();;

private AudioPlayerManager songManager;

private Utilities utils;

private int seekForwardTime = 5000; // 5000 milliseconds

private int seekBackwardTime = 5000; // 5000 milliseconds

private int currentSongIndex = 0;

private boolean isShuffle = false;

private boolean isRepeat = false;

private ArrayList> songsList = new ArrayList>();

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_relaxationlv_audioplayer);

// All player buttons

btnPlay = (ImageButton) findViewById(R.id.btnPlay);

// btnForward = (ImageButton) findViewById(R.id.btnForward);

// btnBackward = (ImageButton) findViewById(R.id.btnBackward);

btnNext = (ImageButton) findViewById(R.id.btnNext);

btnPrevious = (ImageButton) findViewById(R.id.btnPrevious);

btnPlaylist = (ImageButton) findViewById(R.id.btnPlaylist);

// btnRepeat = (ImageButton) findViewById(R.id.btnRepeat);

// btnShuffle = (ImageButton) findViewById(R.id.btnShuffle);

songProgressBar = (SeekBar) findViewById(R.id.songProgressBar);

songTitleLabel = (TextView) findViewById(R.id.songTitle);

songCurrentDurationLabel = (TextView) findViewById(R.id.songCurrentDurationLabel);

songTotalDurationLabel = (TextView) findViewById(R.id.songTotalDurationLabel);

// Mediaplayer

mp = new MediaPlayer();

songManager = new AudioPlayerManager();

utils = new Utilities();

// Listeners

songProgressBar.setOnSeekBarChangeListener(this); // Important

// Getting all songs list

songsList = songManager.getPlayList();

// By default play first song

playSong(0);

/**

* Play button click event

* plays a song and changes button to pause image

* pauses a song and changes button to play image

* */

btnPlay.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View arg0) {

// check for already playing

if(mp.isPlaying()){

if(mp!=null){

mp.pause();

// Changing button image to play button

btnPlay.setImageResource(R.drawable.btn_play);

}

}else{

// Resume song

if(mp!=null){

mp.start();

// Changing button image to pause button

btnPlay.setImageResource(R.drawable.btn_pause);

}

}

}

});

btnNext.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View arg0) {

// check if next song is there or not

if(currentSongIndex < (songsList.size() - 1)){

playSong(currentSongIndex + 1);

currentSongIndex = currentSongIndex + 1;

}else{

// play first song

playSong(0);

currentSongIndex = 0;

}

}

});

/**

* Back button click event

* Plays previous song by currentSongIndex - 1

* */

btnPrevious.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View arg0) {

if(currentSongIndex > 0){

playSong(currentSongIndex - 1);

currentSongIndex = currentSongIndex - 1;

}else{

// play last song

playSong(songsList.size() - 1);

currentSongIndex = songsList.size() - 1;

}

}

});

btnPlaylist.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View arg0) {

Intent i = new Intent(getApplicationContext(), AudioPlayerListActivity.class);

startActivityForResult(i, 100);

}

});

}

/**

* Receiving song index from playlist view

* and play the song

* */

@Override

protected void onActivityResult(int requestCode,

int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if(resultCode == 100){

currentSongIndex = data.getExtras().getInt("songIndex");

// play selected song

playSong(currentSongIndex);

}

}

/**

* Function to play a song

* @param songIndex - index of song

* */

public void playSong(int songIndex){

// Play song

try {

mp.reset();

mp.setDataSource(songsList.get(songIndex).get("songPath"));

mp.prepare();

mp.start();

// Displaying Song title

String songTitle = songsList.get(songIndex).get("songTitle");

songTitleLabel.setText(songTitle);

// Changing Button Image to pause image

btnPlay.setImageResource(R.drawable.btn_pause);

// set Progress bar values

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();

}

}

/**

* Update timer on seekbar

* */

public void updateProgressBar() {

mHandler.postDelayed(mUpdateTimeTask, 100);

}

/**

* Background Runnable thread

* */

private Runnable mUpdateTimeTask = new Runnable() {

public void run() {

long totalDuration = mp.getDuration();

long currentDuration = mp.getCurrentPosition();

// Displaying Total Duration time

songTotalDurationLabel.setText(""+utils.milliSecondsToTimer(totalDuration));

// Displaying time completed playing

songCurrentDurationLabel.setText(""+utils.milliSecondsToTimer(currentDuration));

// Updating progress bar

int progress = (int)(utils.getProgressPercentage(currentDuration, totalDuration));

//Log.d("Progress", ""+progress);

songProgressBar.setProgress(progress);

// Running this thread after 100 milliseconds

mHandler.postDelayed(this, 100);

/// mHandler.removeCallbacks(mUpdateTimeTask); //add this line

}

};

/**

*

* */

@Override

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {

}

/**

* When user starts moving the progress handler

* */

@Override

public void onStartTrackingTouch(SeekBar seekBar) {

// remove message Handler from updating progress bar

mHandler.removeCallbacks(mUpdateTimeTask);

}

/**

* When user stops moving the progress hanlder

* */

@Override

public void onStopTrackingTouch(SeekBar seekBar) {

mHandler.removeCallbacks(mUpdateTimeTask);

int totalDuration = mp.getDuration();

int currentPosition = utils.progressToTimer(seekBar.getProgress(), totalDuration);

// forward or backward to certain seconds

mp.seekTo(currentPosition);

// update timer progress again

updateProgressBar();

}

@Override

protected void onDestroy() {

if (mUpdateTimeTask != null)

mHandler.removeCallbacks(mUpdateTimeTask);

super.onDestroy();

mp.release();

}

}

public class AudioPlayerManager{

// SDCard Path

// final String MEDIA_PATH = new String(Environment.getExternalStorageDirectory().getPath());

final String MEDIA_PATH = "/sdcard/songs/";

// private String MEDIA_PATH =Environment.getExternalStorageDirectory().getPath();

private ArrayList> songsList = new ArrayList>();

// Constructor

public AudioPlayerManager(){

}

/**

* Function to read all mp3 files from sdcard

* and store the details in ArrayList

* */

public ArrayList> getPlayList(){

// File home = new File(MEDIA_PATH);

File home = new File(MEDIA_PATH);

if (home.listFiles(new FileExtensionFilter()).length > 0) {

for (File file : home.listFiles(new FileExtensionFilter())) {

HashMap song = new HashMap();

song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));

song.put("songPath", file.getPath());

// Adding each song to SongList

songsList.add(song);

}

}

// return songs list array

return songsList;

}

/**

* Class to filter files which are having .mp3 extension

* */

class FileExtensionFilter implements FilenameFilter {

public boolean accept(File dir, String name) {

return (name.endsWith(".mp3") || name.endsWith(".MP3"));

}

}

}

2017-07-21

Rohu

+0

加入Android的媒体播放器标签 –

+0

我如何做到这一点? –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值