android在线播放音乐
16lz
2021-12-04
android在线音乐
一种方法是调用android自带的播放器
//调用系统自带播放器Intent intent = new Intent();Uri uri = Uri.parse("http://mul1.tximg.cn/music/group/bbs/mp3/44/100715/1279159638887.mp3?z=909255638");intent.setDataAndType(uri, "audio/*");intent.setAction(Intent.ACTION_VIEW);startActivity(intent);
另一种方法是边下载边播放
这只是一种思路,参考别人的代码,实现分段下载,但是我的代码还很不完善,这方面不准备继续下去了。
package com.sharpandroid.music.activity;import java.io.IOException;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageButton;import android.widget.SeekBar;import android.widget.TextView;import com.sharpandroid.music.R;import com.sharpandroid.music.StreamingMediaPlay2;import com.sharpandroid.music.StreamingMediaPlayer;public class MediaPlayer extends Activity {private Button streamButton;private ImageButton playButton;private boolean isPlaying;private TextView playTime;private StreamingMediaPlayer audioStreamer;private StreamingMediaPlay2 audioStreamer2; @Overridepublic void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); initControls(); } private void initControls() { playTime=(TextView) findViewById(R.id.playTime);streamButton = (Button) findViewById(R.id.button_stream);streamButton.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {startStreamingAudio(); }});playButton = (ImageButton) findViewById(R.id.button_play);playButton.setEnabled(false);playButton.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {if (audioStreamer2.getMediaPlayer().isPlaying()) {audioStreamer2.getMediaPlayer().pause();playButton.setImageResource(R.drawable.button_play);} else {audioStreamer2.getMediaPlayer().start();//audioStreamer.startPlayProgressUpdater();playButton.setImageResource(R.drawable.button_pause);}isPlaying = !isPlaying; }}); } private void startStreamingAudio() { final SeekBar progressBar = (SeekBar) findViewById(R.id.progress_bar);if ( audioStreamer != null) {audioStreamer.interrupt();}//调用系统自带播放器//Intent intent = new Intent();//Uri uri = Uri.parse("http://mul1.tximg.cn/music/group/bbs/mp3/44/100715/1279159638887.mp3?z=909255638");//intent.setDataAndType(uri, "audio/*");//intent.setAction(Intent.ACTION_VIEW);//startActivity(intent); audioStreamer2 = new StreamingMediaPlay2(this, playButton, streamButton, progressBar, playTime); audioStreamer2.startStreaming("http://mul1.tximg.cn/music/group/bbs/mp3/44/100715/1279159638887.mp3?z=909255638",5208, 216); streamButton.setEnabled(false); }}
下一个文件
package com.sharpandroid.music;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import android.content.Context;import android.media.AudioManager;import android.media.MediaPlayer;import android.os.Handler;import android.os.Message;import android.util.Log;import android.widget.Button;import android.widget.ImageButton;import android.widget.SeekBar;import android.widget.TextView;public class StreamingMediaPlay2 {private static final int INTIAL_KB_BUFFER = 96*10/8;//assume 96kbps*10secs/8bits per byteprivate ImageButton playButton;private SeekBar progressBar;private TextView playTime;private long mediaLengthInKb, mediaLengthInSeconds;private int totalKbRead = 0;private File downloadingMediaFile;private Context context;String url ;int progress_leng;private MediaPlayer mediaPlayer;private static final int DOWN_UPDATE = 1;boolean isplay = true;int playe = 0;private static final int DOWN_OVER = 2;private int progress;private final Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {//super.handleMessage(msg);switch (msg.what) {case DOWN_UPDATE:progressBar.setProgress(progress);break;case DOWN_OVER:System.out.println("下载完成");break;}}};public StreamingMediaPlay2(Context context, ImageButtonplayButton, ButtonstreamButton, SeekBarprogressBar,TextView playTime) { this.context = context;this.playButton = playButton;this.playTime=playTime; //播放的进度时刻this.progressBar = progressBar;}public void startStreaming(final String mediaUrl, longmediaLengthInKb, longmediaLengthInSeconds) throws IOException { //this.mediaLengthInKb = mediaLengthInKb; //this.mediaLengthInSeconds = mediaLengthInSeconds;url = mediaUrl;Thread down = new Thread(download);down.start(); }Runnable download = new Runnable(){@Overridepublic void run() {// TODO Auto-generated method stubURLConnection cn;try {cn = new URL(url).openConnection();progress_leng = cn.getContentLength();System.out.println("play-------------------77------长度------"+progress_leng);cn.connect(); InputStream stream = cn.getInputStream(); if (stream == null) { Log.e(getClass().getName(), "Unable to create InputStream for mediaUrl:" + url); }downloadingMediaFile = new File(context.getCacheDir(),"downloadingMedia.dat");if (downloadingMediaFile.exists()) {downloadingMediaFile.delete(); //如果下载完成则删除} FileOutputStream out = new FileOutputStream(downloadingMediaFile); byte buf[] = new byte[1024*10]; int numread = -1; int s = 0; int count = 0; int a = 0; int sum = 0; FileOutputStream out1 = null; // int totalBytesRead = 0, incrementalBytesRead = 0; while((numread = stream.read(buf))!=-1){ byte [] b = new byte[numread]; //System.out.println("输出numread的值-----------"+numread); //System.out.println(a+"----输出numread的值-----------"+sum); if(a==0||a%88==0){ File file = new File(context.getCacheDir(),"play"+(++count)+".dat"); System.out.println("输出count的值-----------"+count); out1 = new FileOutputStream(file,true); } a++; sum +=numread; if(out1!=null){ //b=buf; out1.write(buf,0,numread); } out.write(buf, 0, numread); s+=numread; progress = (int) (((float) s / progress_leng) * 100); handler.sendEmptyMessage(DOWN_UPDATE); if(a==150){ System.out.println("下载完成了"); //播放音乐 Thread thread = new Thread(play); thread.start(); handler.sendEmptyMessage(DOWN_OVER); } // totalBytesRead += numread; // incrementalBytesRead += numread; // totalKbRead = totalBytesRead/1000; //totalKbRead表示已经下载的文件大小 // testMediaBuffer(); // fireDataLoadUpdate(); } } catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }};//播放音乐 public MediaPlayer getMediaPlayer() { return mediaPlayer;} private MediaPlayer createMediaPlayer(File mediaFile) throws IOException { MediaPlayer mPlayer = new MediaPlayer(); mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { public boolean onError(MediaPlayer mp, int what, int extra) { Log.e(getClass().getName(), "Error in MediaPlayer: (" + what +") with extra (" +extra +")" ); return false; } });FileInputStream fis = new FileInputStream(mediaFile);mPlayer.setDataSource(fis.getFD());//此方法返回与流相关联的文件说明符。mPlayer.prepare();return mPlayer; } private void startMediaPlayer() { try { System.out.println("开始播放音乐"); File bufferedFile = new File(context.getCacheDir(),"play1" + ".dat"); //moveFile(downloadingMediaFile,bufferedFile); Log.e(getClass().getName(),"Buffered File path: " + bufferedFile.getAbsolutePath()); Log.e(getClass().getName(),"Buffered File length: " + bufferedFile.length()+""); mediaPlayer = createMediaPlayer(bufferedFile); System.out.println(mediaPlayer.getDuration()+"------开始播放170---------------"+mediaPlayer.getCurrentPosition()); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.start(); //startPlayProgressUpdater(); //playButton.setEnabled(true); } catch (IOException e) { Log.e(getClass().getName(), "Error initializing the MediaPlayer.", e); } } //播放MP3Runnable play = new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubwhile(isplay){ try { System.out.println("开始播放音乐");// File bufferedFile2 = new File(context.getCacheDir(),"play"+ (playe+1)+ ".dat");// if(!bufferedFile2.exists()){// isplay = false;// } File bufferedFile = new File(context.getCacheDir(),"play"+ (++playe)+ ".dat"); System.out.println("文件的名字为-------------"+playe); if(bufferedFile.exists()){ mediaPlayer = createMediaPlayer(bufferedFile); System.out.println(mediaPlayer.getDuration()+"------开始播放170---------------"+mediaPlayer.getCurrentPosition()); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.start(); isplay = false; try {Thread.sleep(120000);isplay = true;} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} } else{ System.out.println("文件不存在----------------"); isplay = false; try {Thread.sleep(10000);isplay = true;} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} } //startPlayProgressUpdater(); //playButton.setEnabled(true); } catch (IOException e) { Log.e(getClass().getName(), "Error initializing the MediaPlayer.", e); } }}}; }
我这个只是为了验证是否想法可行,因此第二段音乐是在2分钟以后才继续播放的
布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10px" android:background="@drawable/back"><TextView android:id="@+id/text_kb_streamed"android:layout_width="fill_parent" android:layout_height="wrap_content" android:textStyle="bold" android:text="流媒体测试"/> <Buttonandroid:id="@+id/button_stream" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10px" style="?android:attr/buttonStyleSmall" android:text="开始缓冲"/> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <SeekBar android:id="@+id/progress_bar" android:layout_height="wrap_content" android:layout_width="200px" style="?android:attr/progressBarStyleHorizontal" /> <TextView android:id="@+id/playTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/progress_bar" android:text="00:00" ></TextView> </RelativeLayout> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageButtonandroid:id="@+id/button_play" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5px" style="?android:attr/buttonStyleSmall" android:src="@drawable/button_pause"/></RelativeLayout></LinearLayout>
没有了,复制下来就能用
更多相关文章
- Android(安卓)文件夹命名规范 国际化资源
- Android系列之Android(安卓)命令行手动编译打包详解
- android读取文件权限
- Android(安卓)圆角图片的实现
- Android(安卓)支持 Java8
- Android文件存储
- Android(安卓)播放资源文件视频
- Android(安卓)解码MediaCodec 播放H264 265
- android listview 设置点击效果selector