MediaControllr使用简介
来源:互联网 发布:ipad怎么登陆淘宝卖家 编辑:程序博客网 时间:2024/06/05 15:46
作者:孔祥辉
前言
本文主要针对MediaController控件进行简单的介绍,并以MP3播放器作为示例进行展示。如有偏颇,请多指教。
简介
android.widget.MediaController是一个与MediaPlayer相匹配的android控件。它主要集合了一些对于媒体播放器来说非常经典的控制接口,包括“播放(Play)/暂停(Pause)”,“倒带(Rewind”,“快进(Fast Forward)”,“前一个(previous)”和“下一个(next)”与进度滑动器(progress slider)。如下图:
该类的部分公有方法:
public booleandispatchKeyEvent (KeyEventevent)
在焦点路径上分发按钮事件到下一个视图。该路径从视图树的顶端遍历到当前获得焦点的视图。如果当前视图已获得焦点,就分发给自身。否则,就分发到下一个节点的焦点路径上。这个方法也可以激发任何一个按键消息监听器。
参数 被分发的事件
返回值 如果这个事件被处理了返回true,否则返回false。
public voidhide ()
从屏幕中移除控制器。
public booleanisShowing ()
(译者注:判断媒体控制器是否处于可见状态。)
public voidonFinishInflate ()
XML文件加载视图完成时调用。这个函数在加载的最后阶段被调用,所有的子视图已经被添加。即使子类重写了onFinishInflate方法,也应该始终确保调用父类方法,以便我们调用。
public booleanonTouchEvent (MotionEventevent)
实现这个方法来处理触摸屏幕引发的事件。
参数 动作事件
返回值 如果这个事件被处理了返回true,否则返回false。
public booleanonTrackballEvent(MotionEvent ev)
实现这个方法处理轨迹球的动作事件,轨迹球相对运动的最后一个事件能用MotionEvent.getX() 和MotionEvent.getY()函数获取。这些都是标准化的,用1表示用户按下一个DPAD按键。(因此他们将经常使用小数值表示,为轨迹球提供更多的的细微运动信息)(译者注:DPAD按键事件: KeyEvent.KEYCODE_DPAD_CENTER(居中)、KeyEvent.KEYCODE_DPAD_DOWN(向下)、KeyEvent.KEYCODE_DPAD_LEFT(向左)、KeyEvent.KEYCODE_DPAD_RIGHT(向右)、KeyEvent.KEYCODE_DPAD_UP(向上)作比较。分别表示居中、下移、左移、右移、上移的操作。相关链接:onTrackBallEvent方法简介)
参数 动作事件
返回值 如果这个事件被处理了返回true,否则返回false。
public void setAnchorView (View view)
设置这个控制器绑定(anchor/锚)到一个视图上。例如可以是一个VideoView对象,或者是你的activity的主视图。
参数 将视图来绑定控制器时可见
public voidsetEnabled (boolean enabled)
设置视图对象的有效状态。这也可以改变子类的有效状态。
参数 如果要让这个视图对象可用就设置为true,否则设置为false。
public voidsetMediaPlayer(MediaController.MediaPlayerControl player)
(译者注:把这个媒体控制器设置到VideoView对象上。)
(笔者注:网上的示例多是依照上述将MediaController用于视频控制,本文中以音频播放为目的,经摸索后实现对MediaPlayer的直接控制。)
public voidsetPrevNextListeners (View.OnClickListenernext, View.OnClickListener prev)
(译者注:设置"previous"和"next"按钮的监听器函数。)
(笔者注:无论英文版或中文版API中都说该函数被调用前,Previous和Next均处于隐藏状态,但是本文的示例中却无法将其隐藏。原因尚不明。)
public voidshow (int timeout)
在屏幕上显示这个控制器。它将在闲置’超时 (timeout)’毫秒到达后自动消失。
参数 这个参数以毫秒为单位。如果设置为0将一直显示到调用 hide()函数为止。
public voidshow ()
在屏幕上显示这个控制器。它将在3秒以后自动消失。
示例代码
在了解的基础上,让我们通过代码进行验证。以下是示例的主要代码
主界面activity的OnCreate函数
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);//获取控件实例//R.raw.thriller为res/raw文件夹下的音频文件的id mPlayer = MediaPlayer.create(this, R.raw.thriller); tvStatus = (TextView)findViewById(R.id.tvStatus); mController = (MediaController)findViewById(R.id.mController); //设定MediaPlayer实例的状态与属性 if (mPlayer.isPlaying()) { mPlayer.reset();//重置为初始状态 } //设定结束及出错处理的监听器 mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {public void onCompletion(MediaPlayer mp) {// TODO Auto-generated method stubmp.release();}}); mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {public boolean onError(MediaPlayer mp, int what, int extra) {// TODO Auto-generated method stubmp.release();return false;}});//构造MediaPlayerControl的实例,用以将MediaPlayer和MediaController的实例//联系起来。主要需要实现start()等几个方法。 MediaController.MediaPlayerControl mpc = new MediaController.MediaPlayerControl() {public void start() {// TODO Auto-generated method stubtry { if(mPlayer != null) { mPlayer.stop(); } mPlayer.prepare(); mPlayer.start(); tvStatus.setText("音乐播放中..."); } catch (Exception e) { tvStatus.setText("播放发生异常..."); e.printStackTrace(); } }public void seekTo(int pos) {// TODO Auto-generated method stubmPlayer.seekTo(pos);}public void pause() {// TODO Auto-generated method stubmPlayer.pause();}public boolean isPlaying() {// TODO Auto-generated method stubreturn mPlayer.isPlaying();}public int getDuration() {// TODO Auto-generated method stubreturn mPlayer.getDuration();}public int getCurrentPosition() {// TODO Auto-generated method stubreturn mPlayer.getCurrentPosition();}public int getBufferPercentage() {// TODO Auto-generated method stubint length = mPlayer.getDuration();if(length != 0)return mPlayer.getCurrentPosition()*100/mPlayer.getDuration();else return 0;}public boolean canSeekForward() {// TODO Auto-generated method stubreturn false;}public boolean canSeekBackward() {// TODO Auto-generated method stubreturn false;}public boolean canPause() {// TODO Auto-generated method stubreturn true;}}; //设定MediaController实例所控制的MediaPlayermController.setMediaPlayer(mpc);//将该实例定位在主界面mController.setAnchorView(findViewById(R.layout.main)); }); }
main.xml的内容
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/tvStatus" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <MediaController android:id="@+id/mController" android:layout_width="match_parent" android:layout_height="76dp"> </MediaController> </LinearLayout>
参考资料
这里感谢网上共享各类资源与知识的前辈,以下是参考到的资料与博文:
http://www.cnblogs.com/wanqieddy/archive/2011/08/16/2140660.html
http://aijiawang-126-com.iteye.com/blog/611250
http://www.oschina.net/question/221735_35484?sort=time
- MediaControllr使用简介
- MediaControllr使用简介
- OKHttp使用简介--使用
- tcpdump nc tcpdump使用简介使用简介
- DOM4J 使用简介[转载]
- Dom4j 使用简介
- DOM4J 使用简介(转)
- Gmail使用简介
- Debug 使用简介
- ant使用简介
- VSS使用简介
- CVS 使用简介
- DOM4J 使用简介
- ant使用简介
- DOM4J 使用简介
- DOM4J 使用简介
- ListView控件使用简介
- Debug 使用简介
- 大规模数据生成 (500万条数据)
- 项目后期修改项目名称
- 向DataGridView控件添加数据
- 新浪旧事-在MyEclipse中添加dtd支持
- 增加外链的最好途径介绍
- MediaControllr使用简介
- 新浪旧事-MyEclipse7.5下手动安装freemarker插件
- android 得到cpu当前运行频率
- u盘安装ubuntu11.10
- 提高tomcat的JVM内存
- 反卷积效果演示
- Service初步
- Binary Lexicographic Sequence_简单DP
- http://acm.nyist.net/JudgeOnline/problem.php?pid=3