MediaPlayer的使用
来源:互联网 发布:hadoop wordcount源码 编辑:程序博客网 时间:2024/06/15 15:00
MediaPlayer的使用
简介:Android应用程序中的音频和视频的播放通常有MediaPlayer类进行处理。使用MediaPlayer,能播放存储在应用程序资源、本地文件、ContentProvider、网络URL的流式传输中的媒体。
MediaPlaye对音频和视频文件以及数据流的管理是作为一个状态机来处理的。状态机详细资料,点击这里跳转简单来说,就是:
- 对将要播放媒体的MediaPlayer进行初始化;
- 使MediaPlayer进入准备状态;
- 开始播放;
- 在播放完成之前暂停或停止播放;
- 播放完成。
一、播放音频
以下是MediaPlayer中一些常用的方法:
示例:播放assetes文件夹下的音频资源,可以暂停/播放、随机切换、与SeekBar控件建立关联。
效果:
1.1 布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="20dp" android:background="#1E95D6" android:gravity="center" android:padding="10dp" android:text="音频播放器" android:textColor="#FFFFFF" android:textSize="20sp" /> <TextView android:id="@+id/audio_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:text="音频文件名" android:textSize="16sp" android:gravity="center"/> <TextView android:id="@+id/audio_singer" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="歌手" android:padding="10dp" android:textSize="14sp" android:gravity="center"/> <LinearLayout android:id="@+id/lin_Media" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:id="@+id/time_current" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="0:0" /> <SeekBar android:id="@+id/seekBar" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="5" /> <TextView android:id="@+id/time_sum" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="0:0" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/play" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="10dp" android:layout_weight="1" android:text="暂停" /> <Button android:id="@+id/random" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="10dp" android:layout_weight="1" android:text="随机切换" /> </LinearLayout></LinearLayout>
2.2 资源文件
2.3 代码
public class MediaMusicActivity extends Activity { @BindView(R.id.audio_title) TextView audioTitle; @BindView(R.id.audio_singer) TextView audioSinger; @BindView(R.id.time_current) TextView timeCurrent; @BindView(R.id.seekBar) SeekBar seekBar; @BindView(R.id.time_sum) TextView timeSum; @BindView(R.id.play) Button btnPlay; private Context mContext = MediaMusicActivity.this; private static MediaPlayer mMusicMediaPlayer; private Timer mTimer = new Timer(); private int toProgress; private int currentMusic; private String[] arrMusicName = new String[]{"Stay With Me(中文版)", " Numb", "Apologize"}; private String[] arrMusicSinger = new String[]{"Jason Chen", "Linkin Park", "Kris Allen"}; private String[] arrMusicUri = new String[]{"_001.mp3", "_002.mp3", "_003.mp3"}; private final static int UPDATE = 01001;//更新 private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case UPDATE: timeCurrent.setText(getTime(mMusicMediaPlayer.getCurrentPosition())); seekBar.setProgress(mMusicMediaPlayer.getCurrentPosition()); break; } } }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_media_music); ButterKnife.bind(this); currentMusic = randomGenerator(0, arrMusicUri.length); initMediaPlayer(mContext); mTimer.schedule(new TimerTask() { @Override public void run() { handler.sendEmptyMessage(UPDATE); } },0,1000); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { timeCurrent.setText(getTime(progress)); toProgress = progress; } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { mMusicMediaPlayer.seekTo(toProgress); mMusicMediaPlayer.start(); } }); } @OnClick({R.id.play, R.id.random}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.play: if(mMusicMediaPlayer.isPlaying()){ mMusicMediaPlayer.pause(); btnPlay.setText("播放"); }else { mMusicMediaPlayer.start(); btnPlay.setText("暂停"); } break; case R.id.random: initMediaPlayer(mContext); break; } } /** * 创建MediaPlayer对象,并设置数据源 */ private void initMediaPlayer(Context context) { int intRandom = randomMusic(); if (mMusicMediaPlayer == null) { mMusicMediaPlayer = new MediaPlayer(); } mMusicMediaPlayer.reset(); // 强制重置(针对非第一次播放) AssetManager assetManager = context.getAssets(); try { AssetFileDescriptor fileDescriptor = assetManager.openFd(arrMusicUri[intRandom]); mMusicMediaPlayer .setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength()); mMusicMediaPlayer.prepare(); mMusicMediaPlayer.start();//播放 updateViews(intRandom);//更新UI } catch (IOException e) { e.printStackTrace(); } } /** * 随机切换(生成一个与当前值不同的随机数) * @return */ private int randomMusic(){ int intRandom = randomGenerator(0, arrMusicUri.length); while (intRandom == currentMusic){ intRandom = randomGenerator(0, arrMusicUri.length); } return intRandom; } /** * 重置播放器后更新UI * @param position */ private void updateViews(int position) { audioTitle.setText(arrMusicName[position]); audioSinger.setText(arrMusicSinger[position]); timeSum.setText(getTime(mMusicMediaPlayer.getDuration())); seekBar.setMax(mMusicMediaPlayer.getDuration()); seekBar.setProgress(0); btnPlay.setText("暂停"); currentMusic = position; } /** * 生成指定范围的随机数[min,max) * * @param min * @param max * @return */ private int randomGenerator(int min, int max) { return new Random().nextInt(max) % (max - min + 1) + min; } @Override protected void onDestroy() { super.onDestroy(); if (mMusicMediaPlayer != null) { mMusicMediaPlayer.stop(); } if(mTimer != null){ mTimer.cancel(); } } /** * 转化时长 * @param duration * @return */ private String getTime(int duration) { int intMinute = (duration / 1000) / 60; int intSecond = (duration / 1000) % 60; String strMinute = (intMinute < 10 ? "0" + intMinute : "" + intMinute); String strSecond = (intSecond < 10 ? "0" + intSecond : "" + intSecond); return strMinute + ":" + strSecond; }}
二、播放视频
阅读全文
0 0
- 简单的MediaPlayer使用
- MediaPlayer的基本使用
- MediaPlayer的基本使用
- MediaPlayer 的使用介绍
- MediaPlayer的简单使用
- MediaPlayer的使用
- MediaPlayer的使用
- Android Mediaplayer的使用
- 简单的使用MediaPlayer
- MediaPlayer类的使用
- android的mediaPlayer使用
- MediaPlayer的使用
- MediaPlayer的使用
- 关于mediaPlayer的正确使用
- 1.Android MediaPlayer的使用
- android下MediaPlayer的使用
- 使用MediaPlayer的一些注意事项
- android日记:mediaPlayer的使用
- 水平居中设置
- PostgreSQL 连接串URI配置(libpq兼容配置)
- html 编写的简单计算器
- 电机的MCPWM控制
- C++学习笔记 23
- MediaPlayer的使用
- hdu3987 Harry Potter and the Forbidden Forest 最小割边数
- ORACLE分区表的概念及操作
- Oracle坏块问题处理 Oracle坏块修复 Oracle坏块怎么办
- 获取object类型里的键值
- linux grep查看指定内容上下几行
- 功能最全面 体验更极致 小兴看看mini升级版9月19日首发
- Elasticsearch JAVA API开发记录
- post方式与get方式提交到Jsp页面中文乱码的处理