本文将带你了解Android应用开发之使用Service组件实现简单的音乐播放器功能 --Android基础,希望本文对大家学Android有所帮助
1、本例利用Service实现简单的音乐播放功能,下面是效果图。(点击开始播放开启服务,音乐播放,点击“停止播放”关闭服务,音乐停止播放。)
2、核心代码:
MusicService.java:
package thonlon.example.cn.servicedemo;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.net.Uri;import android.os.IBinder;import java.io.IOException;/** * 绑定服务的时候被调用 */public class MusicService extends Service { private MediaPlayer mediaPlayer; @Override public IBinder onBind(Intent intent) { return null; } /** * Service被创建后被调用 */ @Override public void onCreate() {// 播放本地资源的音乐// mediaPlayer = MediaPlayer.create(this, R.raw.snh);// 播放文件系统的音乐// File file = new File(Environment.getExternalStorageDirectory(), "zshyn.mp3");// mediaPlayer = new MediaPlayer();// try {// mediaPlayer.setDataSource(file.getAbsolutePath());//通过获取绝对路径来设置播放源头// } catch (IOException e) {// e.printStackTrace();// 播放网络中的音乐 mediaPlayer = new MediaPlayer(); Uri uri = Uri.parse("http://www.nxl123.cn/snh.mp3"); try { mediaPlayer.setDataSource(this, uri);//或者直接mediaPlayer.setDataSource("http://www.nxl123.cn/snh.mp3"); } catch (IOException e) { e.printStackTrace(); } } /** * Service被开始后调用 */ @Override public int onStartCommand(Intent intent, int flags, int startId) { mediaPlayer.prepareAsync();//准备资源,可能阻塞主线程,所以要在子线程调用。在这里使用prepareAsync函数就可以了 //防止资源还没有准备完毕就播放音乐,所以要设置准备资源监听器 //表示当准备资源完成后,调用监听器中onPrepare方法 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mediaPlayer.start();//开始播放音乐 } }); //MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。 return super.onStartCommand(intent, flags, startId); } /** * Service被停止后调用 */ @Override public void onDestroy() { mediaPlayer.stop();//停止播放 mediaPlayer.release();//释放准备的资源,如果还需要用到此对象则可先不销毁 }}
MainActivity.java:
package thonlon.example.cn.servicedemo;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onClick(View v) { Intent intent = new Intent(); intent.setClass(this, MusicService.class); switch (v.getId()) { case R.id.btn_start_service: startService(intent); break; case R.id.btn_stop_service: stopService(intent); break; } }}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!