频道栏目
首页 > 资讯 > 其他 > 正文

如何使用Service实现简单的音乐播放功能?

18-06-23        来源:[db:作者]  
收藏   我要投稿

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(), "../201510/GridViewLiveTiles.html");
//  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;
  }
 }
}
相关TAG标签
上一篇:win8系统用cmd修改mysql密码的方法
下一篇:Android8. 0开发之msensor移植
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站