1、Android学习笔记045之MediaPlayerAndroid学习笔记045之MediaPlayer这一篇我们介绍一下Android的音频和视频播放,重点讲解Mediaplayer这个类。 Android的MediaPlayer包含了Audio和Video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlaer来实现的。概述首先我们看一下Mediaplayer的生命周期图下面我们看一下MediaPlayer提供的方法:addTimedTextSource(Context context, Uri uri, String mimeType)方法:添
2、加一个外部定时文本文件,重载方法:addTimedTextSource(String path, String mimeType)、addTimedTextSource(FileDescriptor fd, long offset, long length, String mime)、addTimedTextSource(FileDescriptor fd, String mimeType)attachAuxEffect(int effectId)方法:给播放器附加一个播放效果create(Context context, Uri uri, SurfaceHolder holder, Audi
3、oAttributes audioAttributes, int audioSessionId)方法:实例化Mediaplayer的方法,重载方法有:create(Context context, Uri uri, SurfaceHolder holder)、create(Context context, int resid, AudioAttributes audioAttributes, int audioSessionId)、create(Context context, int resid)、create(Context context, Uri uri)deselectTrack(i
4、nt index)方法:取消曲目getAudioSessionId()方法:获取音乐的SessionIDgetCurrentPosition()方法:获取当前播放位置getDuration()方法:获取文件的播放时间getPlaybackParams()方法:获取播放参数getSelectedTrack(int trackType)方法:获取选中的曲目getSyncParams()方法:获取Audio或者Vedio的同步模式getTimestamp()方法:获取当前的播放位置作为一个时间戳getTrackInfo()方法:获取轨道信息数组getVideoHeight()方法:获取Vedio播放
5、器的高度getVideoWidth()方法:获取Vedio播放器的宽度isLooping()方法:检查播放器是否在循环isPlaying()方法:检查播放器是否在播放pause()方法:暂停prepare()方法:准备播放器进行播放prepareAsync():异步准备播放器release()方法:释放与当前Mediaplayer相关的资源reset()方法:重置播放器状态seekTo(int msec)方法:跳转到特定时间位置selectTrack(int index)方法:选中一个曲目setAudioAttributes(AudioAttributes attributes)方法:设置音频
6、播放器的属性setAudioSessionId(int sessionId)方法:设置音频播放器的SessionIdsetAudioStreamType(int streamtype)方法:设置Mediaplayer的音频流类型setAuxEffectSendLevel(float level)方法:设置播放器的第二电平附加作用setDataSource(String path)方法:设置多媒体资源位置,重载方法有:setDataSource(Context context, Uri uri, Map音频播放使用Mediaplayer实现音频播放有几个步骤:创建Mediaplayer对象,这有
7、几种方法,一种是直接new出来,另外一种是通过调用create方法,需要注意的是:直接new出来需要调用prepare方法,建议使用prepareAsync方法完成准备;调用create方法就不能调用prepare方法,否则会出现状态异常通过setDataSource()方法设置音频文件的路径,当然这里只是很简单的,实际开发中会采取其他方法3.调用start方法开始播放音频下面我们通过一个小例子实现音频播放首先是布局文件代码: 这里没有什么好介绍的,非常简单的一个布局。接下来是Activity的代码:package com.example.mediplayerdemo;import andro
8、id.content.Context;import android.content.Intent;import android.media.MediaPlayer;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;i
9、mport android.widget.Button;import android.widget.SeekBar;import android.widget.TextView;/* * Created by Huawen on 2016/9/5. */public class MusicActivity extends AppCompatActivity private static final String TAG = MusicActivity;private Button btn_music_play;private Button btn_music_stop;private Butt
10、on btn_music_resume;private SeekBar mSeekBar;private TextView tv_now_time;private TextView tv_total_time;private MediaPlayer mMediaPlayer;private Handler mHandler = new Handler() Override public void handleMessage(Message msg) super.handleMessage(msg); ;private boolean isDstroy = false;private Runna
11、ble mRunable = new Runnable() Override public void run() if (!isDstroy) mHandler.postDelayed(this, 1000); int currentTime = Math.round(mMediaPlayer.getCurrentPosition() / 1000); String currentStr = String.format(%s%02d:%02d, 当前时间 , currentTime / 60, currentTime % 60); tv_now_time.setText(currentStr)
12、; mSeekBar.setProgress(mMediaPlayer.getCurrentPosition(); ;Overrideprotected void onCreate(Nullable Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_music); initView(); initMediaPlayer();private void initMediaPlayer() mMediaPlayer = MediaPlayer.create(t
13、his, R.raw.erathemass); Log.d(TAG, 初始化播放器);private void initView() btn_music_play = (Button) findViewById(R.id.btn_music_play); btn_music_stop = (Button) findViewById(R.id.btn_music_stop); btn_music_resume = (Button) findViewById(R.id.btn_music_resume); mSeekBar = (SeekBar) findViewById(R.id.seekbar
14、); tv_now_time = (TextView) findViewById(R.id.tv_now_time); tv_total_time = (TextView) findViewById(R.id.tv_total_time); mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() Orride public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) if (mMediaPlayer !=
15、 null) mMediaPlayer.seekTo(seekBar.getProgress(); Override public void onStartTrackingTouch(SeekBar seekBar) Override public void onStopTrackingTouch(SeekBar seekBar) ); btn_music_play.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) if (!mMediaPlayer.isPlaying() mM
16、ediaPlayer.start(); int totalTime = Math.round(mMediaPlayer.getDuration() / 1000); String totalStr = String.format(%02d:%02d, totalTime / 60, totalTime % 60); tv_total_time.setText(totalStr); mHandler.postDelayed(mRunable, 1000); mSeekBar.setMax(mMediaPlayer.getDuration(); ); btn_music_resume.setOnC
17、lickListener(new View.OnClickListener() Override public void onClick(View v) if (mMediaPlayer.isPlaying() mMediaPlayer.pause(); ); btn_music_stop.setOnClickListener(new View.OnClickListener() Override public id onClick(View v) if (mMediaPlayer.isPlaying() mMediaPlayer.reset(); initMediaPlayer(); );p
18、ublic static void startActivity(Context mContext) mContext.startActivity(new Intent(mContext, MusicActivity.class);Overrideprotected void onDestroy() super.onDestroy(); if (mMediaPlayer != null) mMediaPlayer.stop(); isDstroy = true; mMediaPlayer.release(); 这里只是很简单的实现单首歌曲的播放,就不贴效果图了,后面我们会专门做一个音乐播放器的项
19、目。视频播放这里我们使用VideoView实现网络视频播放,实现的步骤:在布局文件中创建VideoView组件,或者在代码中指定调用VedioView的两个方法指定播放的视频文件:(1)setVidePath(String path):加载path文件代表的视频;(2)setVideoURI(Uri uri):加载uri所对应的视频调用VideoView的start()、stop()、pause()方法来控制视频的播放下面我们实现一个简单的例子:首先是布局文件 然后是activity代码:package com.example.mediplayerdemo;import android.con
20、tent.Context;import android.content.Intent;import .Uri;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.VideoView;/* * author: Huawen * created on: 2016/9/5
21、11:00 * description: */public class MovieActivity extends AppCompatActivity private VideoView videoView;private Button btn_video_start;private Button btn_video_pause;private Button btn_video_stop;private Uri mURI = Uri.parseOverrideprotected void onCreate(Nullable Bundle savedInstanceState) super.on
22、Create(savedInstanceState); setContentView(R.layout.activity_movie); videoView = (VideoView) findViewById(R.id.videoView); btn_video_start = (Button) findViewById(R.id.btn_video_start); btn_video_pause = (Button) findViewById(R.id.btn_video_pause); btn_video_stop = (Button) findViewById(R.id.btn_video_stop); videoView.setVideoURI(mURI); btn_video_start.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) if (videoView != null) videoView.start(); ); btn_vi
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1