首页 > 系统 > Android > 正文

Android 多媒体 MediaPlayer之从三种资源文件中获取数据播放

2019-11-09 15:38:27
字体:
来源:转载
供稿:网友

    MediaPlayer类最让我想到的是音频和视频的播放了  该类提供了开始或恢复播放start()、暂停播放pause()、停止播放stop()等方法。该类位于android.media包下,详见API文档。

  三种获取资源文件的方式

1.播放应用内的音频文件

	MediaPlayer mMediaPlayer=new MediaPlayer.create(this, R.raw.love);

2.播放内存卡中音频文件

	MediaPlayer mMediaPlayer=new MediaPlayer.setDataSource("file://mnt/sdcard/Music/test.mp3");

3.获取网络上的媒体文件

	MediaPlayer mMediaPlayer=new MediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.135/test.mp3"));

我们下面做一个播放音乐的小列子。

步骤1.创建项目

      2.activity_main.xml的代码,添加一个进度条SeekBar和一个ImageButton按钮

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    xmlns:android1="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <SeekBar        android:id="@+id/seekBar1"        android:layout_width="match_parent"        android:layout_height="wrap_content"         />	<ImageButton 	    android:layout_width="wrap_content"	    android:layout_height="wrap_content" 	    android:src="@android:drawable/ic_media_play"	    android:onClick="playMusic"	    /></LinearLayout>

3.在MainActivity写playMusic点击事件(用播放应用内的音频文件)

public void playMusic(View view){
			//把view强制转换成ImageButton		final ImageButton imageButton= (ImageButton) view;
		if (mMediaPlayer == null) {			// 实列化一个MediaPlayer			// 播放应用内的音频文件			mMediaPlayer = new MediaPlayer().create(this, R.raw.love);
			// 监听:准备完成的监听			mMediaPlayer.setOnPReparedListener(new MediaPlayer.OnPreparedListener() {				@Override				public void onPrepared(MediaPlayer mediaPlayer) {					mediaPlayer.start();					// 把图标修改为暂停的图标					imageButton.setImageResource(android.R.drawable.ic_media_pause);					// 获取音乐的总时长					int duration = mediaPlayer.getDuration();					// 设置进度条的最大值为音乐的总时长					mSeekBar.setMax(duration);					new MyThread().start();				}			});		} else if (mMediaPlayer.isPlaying()) {			mMediaPlayer.pause();			// 把图标修改为播放的图标			imageButton.setImageResource(android.R.drawable.ic_media_play);		} else {			mMediaPlayer.start();			// 把图标修改为暂停的图标			imageButton.setImageResource(android.R.drawable.ic_media_pause);		}	}

5.为进度条添加事件

mSeekBar = (SeekBar) findViewById(R.id.seekBar1);		mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {						@Override			public void onStopTrackingTouch(SeekBar seekBar) {				//获取拖动结束之后的位置                int progress=seekBar.getProgress();                //跳转到某个位置播放                mMediaPlayer.seekTo(progress);			}			@Override			public void onStartTrackingTouch(SeekBar seekBar) {				// TODO Auto-generated method stub			}			@Override			public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {				// TODO Auto-generated method stub			}		});

 6.写一个线程让播放进度和进度条一样

class MyThread extends Thread{		@Override		public void run() {			// TODO Auto-generated method stub			super.run();			while(mSeekBar.getProgress()<=mSeekBar.getMax()){				 //获取当前音乐播放的位置                int currentPosition=mMediaPlayer.getCurrentPosition();                //让进度条动起来                mSeekBar.setProgress(currentPosition);			}		}	}

得到下图就完成了

  在MainActivity写playMusic点击事件(播放内存卡中音频文件)

首先要获取读取内存卡的权限

	<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
	
 public void isPlayOrPause(View view){        final ImageButton imageButton= (ImageButton) view;        if(mMediaPlayer==null){            //实例化MediaPlayer            //播放内存卡中音频文件            mMediaPlayer=new MediaPlayer();            //设置类型            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);            //设置音源            try {                mMediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Music/f.mp3"));                 //准备一下(内存卡)                mMediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();            }            //监听:准备完成的监听            mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {                @Override                public void onPrepared(MediaPlayer mediaPlayer) {                    mediaPlayer.start();                    //把图标修改为暂停的图标                    imageButton.setImageResource(android.R.drawable.ic_media_pause);                    //获取音乐的总时长                    int duration=mediaPlayer.getDuration();                    //设置进度条的最大值为音乐的总时长                    seekBar.setMax(duration);                    new MyThread().start();                }            });        }else if(mMediaPlayer.isPlaying()){            mMediaPlayer.pause();            //把图标修改为播放的图标            imageButton.setImageResource(android.R.drawable.ic_media_play);        }else{            mMediaPlayer.start();            //把图标修改为暂停的图标            imageButton.setImageResource(android.R.drawable.ic_media_pause);        }    }

在MainActivity写playMusic点击事件(获取网络上的媒体文件)

首先要获取联网的权限

 	<uses-permission android:name="android.permission.INTERNET" /> 
	把音频文件放入到tomcat的Root下面然后启动tomcat,一定要在手机上输入那个地址检查一下是否能进入tomcat的官网,这里就不做步骤演示了。
 public void isPlayOrPause(View view){        final ImageButton imageButton= (ImageButton) view;        if(mMediaPlayer==null){            //实例化MediaPlayer            mMediaPlayer=new MediaPlayer();            //设置类型            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);            //设置音源            try {
  		//播放网络音乐                mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.135/internet.mp3"));                //准备(网络)          mediaPlayer.prepareAsync();
            } catch (IOException e) {
                e.printStackTrace();            }            //监听:准备完成的监听            mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {                @Override                public void onPrepared(MediaPlayer mediaPlayer) {                    mediaPlayer.start();                    //把图标修改为暂停的图标                    imageButton.setImageResource(android.R.drawable.ic_media_pause);                    //获取音乐的总时长                    int duration=mediaPlayer.getDuration();                    //设置进度条的最大值为音乐的总时长                    seekBar.setMax(duration);                    new MyThread().start();                }            });        }else if(mMediaPlayer.isPlaying()){            mMediaPlayer.pause();            //把图标修改为播放的图标            imageButton.setImageResource(android.R.drawable.ic_media_play);        }else{            mMediaPlayer.start();            //把图标修改为暂停的图标            imageButton.setImageResource(android.R.drawable.ic_media_pause);        }    }


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表