简单MediaPlayer 例子

16 public class MainActivity extends Activity {
17     private EditText et_path;
18     private Button btn_play, btn_pause, btn_replay, btn_stop;
19     private MediaPlayer mediaPlayer;
20
21     @Override
22     protected void onCreate(Bundle savedInstanceState) {
23         super.onCreate(savedInstanceState);
24         setContentView(R.layout.activity_main);
25
26         et_path = (EditText) findViewById(R.id.et_path);
27         btn_play = (Button) findViewById(R.id.btn_play);
28         btn_pause = (Button) findViewById(R.id.btn_pause);
29         btn_replay = (Button) findViewById(R.id.btn_replay);
30         btn_stop = (Button) findViewById(R.id.btn_stop);
31
32         btn_play.setOnClickListener(click);
33         btn_pause.setOnClickListener(click);
34         btn_replay.setOnClickListener(click);
35         btn_stop.setOnClickListener(click);
36     }
37
38     private View.OnClickListener click = new View.OnClickListener() {
39
40         @Override
41         public void onClick(View v) {
42
43             switch (v.getId()) {
44             case R.id.btn_play:
45                 play();
46                 break;
47             case R.id.btn_pause:
48                 pause();
49                 break;
50             case R.id.btn_replay:
51                 replay();
52                 break;
53             case R.id.btn_stop:
54                 stop();
55                 break;
56             default:
57                 break;
58             }
59         }
60     };
61     /**
62      * 播放音乐
63      */
64     protected void play() {
65         String path = et_path.getText().toString().trim();
66         File file = new File(path);
67         if (file.exists() && file.length() > 0) {
68             try {
69                mediaPlayer = new MediaPlayer();
70                 // 设置指定的流媒体地址
71                 mediaPlayer.setDataSource(path);
72                 // 设置音频流的类型
73                 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
74
75                 // 通过异步的方式装载媒体资源
76                 mediaPlayer.prepareAsync();
77                 mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
78                     @Override
79                     public void onPrepared(MediaPlayer mp) {
80                         // 装载完毕 开始播放流媒体
81                         mediaPlayer.start();
82                         Toast.makeText(MainActivity.this, "开始播放", 0).show();
83                         // 避免重复播放,把播放按钮设置为不可用
84                         btn_play.setEnabled(false);
85                     }
86                 });
87                 // 设置循环播放
88                 // mediaPlayer.setLooping(true);
89                 mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
90
91                     @Override
92                     public void onCompletion(MediaPlayer mp) {
93                         // 在播放完毕被回调
94                         btn_play.setEnabled(true);
95                     }
96                 });
97
98                 mediaPlayer.setOnErrorListener(new OnErrorListener() {
99
100                     @Override
101                     public boolean onError(MediaPlayer mp, int what, int extra) {
102                         // 如果发生错误,重新播放
103                         replay();
104                         return false;
105                     }
106                 });
107             } catch (Exception e) {
108                 e.printStackTrace();
109                 Toast.makeText(this, "播放失败", 0).show();
110             }
111         } else {
112             Toast.makeText(this, "文件不存在", 0).show();
113         }
114
115     }
116     /**
117      * 暂停
118      */
119     protected void pause() {
120         if (btn_pause.getText().toString().trim().equals("继续")) {
121             btn_pause.setText("暂停");
122             mediaPlayer.start();
123             Toast.makeText(this, "继续播放", 0).show();
124             return;
125         }
126         if (mediaPlayer != null && mediaPlayer.isPlaying()) {
127             mediaPlayer.pause();
128             btn_pause.setText("继续");
129             Toast.makeText(this, "暂停播放", 0).show();
130         }
131
132     }
133    
134     /**
135      * 重新播放
136      */
137     protected void replay() {
138         if (mediaPlayer != null && mediaPlayer.isPlaying()) {
139             mediaPlayer.seekTo(0);
140             Toast.makeText(this, "重新播放", 0).show();
141             btn_pause.setText("暂停");
142             return;
143         }       
144         play();
145     }
146    
147     /**
148      * 停止播放
149      */
150     protected void stop() {
151         if (mediaPlayer != null && mediaPlayer.isPlaying()) {
152             mediaPlayer.stop();
153             mediaPlayer.release();
154             mediaPlayer = null;
155             btn_play.setEnabled(true);
156             Toast.makeText(this, "停止播放", 0).show();
157         }
158
159     }
160
161     @Override
162     protected void onDestroy() {
163         // 在activity结束的时候回收资源
164         if (mediaPlayer != null && mediaPlayer.isPlaying()) {
165             mediaPlayer.stop();
166             mediaPlayer.release();
167             mediaPlayer = null;
168         }
169         super.onDestroy();
170     }

171 }



通过各种方法创建MediaPlayer:

MediaPlayer主要用来控制Android下播放文件或流的类。MediaPlayer处于Android多媒体包下"android.media.MediaPlayer",仅有一个无参的构造函数,虽然仅为我们提供了一个无参的构造函数,为了方便我们初始化,还为我们提供了几个静态的create()方法用于完成MediaPlayer初始化的工作。

  • static MediaPlayer create(Context context,int resid):通过音频资源的Id来创建一个MediaPlayer实例。

  • static MediaPlayer create(Context context,Uri uri):通过一个音频资源的Uri地址来创建一个MediaPlayer实例。

  MediaPlayer除了通过上面两个create()方法在初始化的时候指定媒体资源,还可以通过MediaPlayer.setDataSource()方法为初始化后的MediaPlayer设置媒体资源,setDataSource()具有多个重载函数,适用于不同的媒体资源来源,以下讲解几个常用的,其他的可以查阅官方文档。

  • void setDataSource(String path):通过一个媒体资源的地址指定MediaPlayer的数据源,这里的path可以是一个本地路径,也可以是网络路径。

  • void setDataSource(Context context,Uri uri):通过一个Uri指定MediaPlayer的数据源,这里的Uri可以是网络路径或这一个内容提供者的Uri。

  • void setDataSource(FileDescriptor fd):通过一个FileDescriptor指定一个MediaPlayer的数据源。

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值