zoukankan      html  css  js  c++  java
  • Android 中级教程(一)之Android MediaPlayer播放mp3的实例!

    大家好我们今天研究的是Android中很重要也最为复杂的媒体播放器---MediaPlayer.

    Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的。

      MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaPlayer程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。

    而我们今天的例子只是利用MediaPlayer来播放res/raw文件夹中一首非常动听的英文哥love fool.mp3.程序有三个ImageButton按钮,播放,停止,和暂停!三个按钮的功能我就不用多说.下面我将Step By Step教你如何完成本Demo的实现.

    Step 1 :新建一个Android工程,命名为MediaPlayerDemo.

    Step 2 :准备素材,在res下建一个raw文件夹,将foollove.mp3导入,将play.png,pause.png,及stop.png导入res/drawable文件夹下.

    Step 3: 设计UI布局,在main.xml里放入三个ImageButton(这里可以用AbsoluteLayout,或者RelativeLayout实现,我用后者).代码如下:

    1. <?xml version="1.0" encoding="utf-8"?> 
    2. <RelativeLayout 
    3.   android:layout_width="fill_parent" 
    4.   android:layout_height="fill_parent" 
    5.   android:background="@drawable/white" 
    6.   xmlns:android="http://schemas.android.com/apk/res/android " 
    7. > 
    8.   <TextView 
    9.     android:id="@+id/myTextView1" 
    10.     android:layout_width="wrap_content" 
    11.     android:layout_height="wrap_content" 
    12.     android:text="@string/hello" 
    13.     android:layout_alignParentTop="true" 
    14.     android:layout_alignParentLeft="true" 
    15.   > 
    16.   </TextView> 
    17.   <ImageButton 
    18.     android:id="@+id/myButton1" 
    19.     android:layout_width="wrap_content" 
    20.     android:layout_height="wrap_content" 
    21.     android:src="@drawable/play" 
    22.     android:layout_below="@+id/myTextView1" 
    23.   > 
    24.   </ImageButton> 
    25.   <ImageButton 
    26.     android:id="@+id/myButton3" 
    27.     android:layout_width="wrap_content" 
    28.     android:layout_height="wrap_content" 
    29.     android:src="@drawable/pause" 
    30.     android:layout_alignTop="@+id/myButton1" 
    31.     android:layout_toRightOf="@+id/myButton1" 
    32.   > 
    33.   </ImageButton> 
    34.   <ImageButton 
    35.     android:id="@+id/myButton2" 
    36.     android:layout_width="wrap_content" 
    37.     android:layout_height="wrap_content" 
    38.     android:src="@drawable/stop" 
    39.     android:layout_alignTop="@+id/myButton1" 
    40.     android:layout_toRightOf="@+id/myButton3" 
    41.   > 
    42.   </ImageButton> 
    43. </RelativeLayout> 
    44.  

    Step 4 :主控制程序MediaPlayerDemo.java的实现,代码如下:

    1. package com.android.test;  
    2.  
    3. import android.app.Activity;  
    4. import android.media.MediaPlayer;  
    5. import android.os.Bundle;  
    6. import android.view.View;  
    7. import android.widget.ImageButton;  
    8. import android.widget.TextView;  
    9.  
    10. public class MediaPlayerDemo extends Activity {  
    11.      
    12.  private ImageButton mb1,mb2,mb3;  
    13.  private TextView tv;  
    14.  private MediaPlayer mp;  
    15.  //声明一个变量判断是否为暂停,默认为false  
    16.  private boolean isPaused = false;  
    17.     public void onCreate(Bundle savedInstanceState) {  
    18.         super.onCreate(savedInstanceState);  
    19.         setContentView(R.layout.main);  
    20.           
    21.         //通过findViewById找到资源  
    22.         mb1 = (ImageButton)findViewById(R.id.myButton1);  
    23.         mb2 = (ImageButton)findViewById(R.id.myButton2);  
    24.         mb3 = (ImageButton)findViewById(R.id.myButton3);  
    25.         tv = (TextView)findViewById(R.id.myTextView1);  
    26.           
    27.         //创建MediaPlayer对象,将raw文件夹下的lovefool.mp3  
    28.         mp = MediaPlayer.create(this,R.raw.lovefool);  
    29.         //增加播放音乐按钮的事件  
    30.         mb1.setOnClickListener(new ImageButton.OnClickListener(){  
    31.    @Override 
    32.    public void onClick(View v) {  
    33.     try {       
    34.      if(mp != null)  
    35.      {  
    36.       mp.stop();  
    37.      }      
    38.      mp.prepare();  
    39.      mp.start();  
    40.      tv.setText("音乐播放中...");  
    41.     } catch (Exception e) {  
    42.      tv.setText("播放发生异常...");  
    43.      e.printStackTrace();  
    44.     }      
    45.    }        
    46.         });  
    47.           
    48.         mb2.setOnClickListener(new ImageButton.OnClickListener(){  
    49.    @Override 
    50.    public void onClick(View v) {  
    51.     try {  
    52.      if(mp !=null)  
    53.      {  
    54.       mp.stop();  
    55.       tv.setText("音乐停止播放...");  
    56.      }  
    57.     } catch (Exception e) {  
    58.      tv.setText("音乐停止发生异常...");  
    59.      e.printStackTrace();  
    60.     }  
    61.       
    62.    }           
    63.         });  
    64.           
    65.         mb3.setOnClickListener(new ImageButton.OnClickListener(){  
    66.    @Override 
    67.    public void onClick(View v) {  
    68.     try {  
    69.      if(mp !=null)  
    70.      {  
    71.       if(isPaused==false)  
    72.       {  
    73.        mp.pause();  
    74.        isPaused=true;  
    75.        tv.setText("停止播放!");  
    76.       }  
    77.       else if(isPaused==true)  
    78.       {  
    79.        mp.start();  
    80.        isPaused = false;  
    81.        tv.setText("开始播发!");  
    82.       }  
    83.      }  
    84.     } catch (Exception e) {  
    85.      tv.setText("发生异常...");  
    86.      e.printStackTrace();  
    87.     }  
    88.       
    89.    }           
    90.         });  
    91.           
    92.         /* 当MediaPlayer.OnCompletionLister会运行的Listener */ 
    93.         mp.setOnCompletionListener(  
    94.           new MediaPlayer.OnCompletionListener()   
    95.         {   
    96.           // @Override   
    97.           /*覆盖文件播出完毕事件*/ 
    98.           public void onCompletion(MediaPlayer arg0)   
    99.           {   
    100.             try   
    101.             {   
    102.               /*解除资源与MediaPlayer的赋值关系  
    103.                * 让资源可以为其它程序利用*/ 
    104.               mp.release();   
    105.               /*改变TextView为播放结束*/ 
    106.               tv.setText("音乐播发结束!");   
    107.             }   
    108.             catch (Exception e)   
    109.             {   
    110.               tv.setText(e.toString());   
    111.               e.printStackTrace();   
    112.             }   
    113.           }   
    114.         });   
    115.            
    116.         /* 当MediaPlayer.OnErrorListener会运行的Listener */ 
    117.         mp.setOnErrorListener(new MediaPlayer.OnErrorListener()  
    118.         {  
    119.           @Override 
    120.           /*覆盖错误处理事件*/ 
    121.           public boolean onError(MediaPlayer arg0, int arg1, int arg2)  
    122.           {  
    123.             // TODO Auto-generated method stub  
    124.             try 
    125.             {  
    126.               /*发生错误时也解除资源与MediaPlayer的赋值*/ 
    127.               mp.release();  
    128.               tv.setText("播放发生异常!");  
    129.             }  
    130.             catch (Exception e)  
    131.             {  
    132.               tv.setText(e.toString());   
    133.               e.printStackTrace();   
    134.             }   
    135.             return false;   
    136.           }   
    137.         });   
    138.       }   
    139.     
    140. }  
    141.  
    142.  
    143.  
    144.  
    145.  

    Step 5: 运行效果如下,一首动听的love fool在播放...享受中...

        

       

       

    扩散学习:

    如果我们想播放手机卡里的音乐,或者URL下载流媒体来播放,示意程序如下:

    1. MediaPlayer mp = new MediaPlayer();   
    2.  
    3. mp.setDataSource(String URL/FILE_PATH);   
    4.  
    5. mp.prepare();   
    6.  
    7. mp.start();   
    8.  

    以上程序主要是通过MediaPlayer.setDataSource() 的方法,将URL或文件路径以字符串的方式传入.使用setDataSource ()方法时,要注意以下三点:

    1.构建完成的MediaPlayer 必须实现Null 对像的检查.

    2.必须实现接收IllegalArgumentException 与IOException 等异常,在很多情况下,你所用的文件当下并不存在.

    3.若使用URL 来播放在线媒体文件,该文件应该要能支持pragressive 下载.

    本文出自 “Android_Tutor” 博客,请务必保留此出处http://weizhulin.blog.51cto.com/1556324/311694

  • 相关阅读:
    [PHP动态]0001.关于 PHP 7 你必须知道的五件事
    [PHP工具推荐]0001.分析和解析代码的7大工具
    Java数据结构和算法(八)——递归
    Java数据结构和算法(七)——链表
    Java数据结构和算法(六)——前缀、中缀、后缀表达式
    Java数据结构和算法(五)——队列
    Java数据结构和算法(四)——栈
    Java数据结构和算法(三)——冒泡、选择、插入排序算法
    Java数据结构和算法(二)——数组
    Java数据结构和算法(一)——简介
  • 原文地址:https://www.cnblogs.com/xiaoran1129/p/2814029.html
Copyright © 2011-2022 走看看