zoukankan      html  css  js  c++  java
  • 使用Service组件实现简单的音乐播放器功能 --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;
    }
    }
    }

  • 相关阅读:
    [CodeForces]Codeforces Round #429 (Div. 2) ABC(待补)
    About Me
    2018-06-14
    Codeforces Codeforces Round #484 (Div. 2) E. Billiard
    Codeforces Codeforces Round #484 (Div. 2) D. Shark
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
    Codeforces Avito Code Challenge 2018 D. Bookshelves
    Codeforces Round #485 (Div. 2) D. Fair
    Codeforces Round #485 (Div. 2) F. AND Graph
  • 原文地址:https://www.cnblogs.com/qikeyishu/p/9190325.html
Copyright © 2011-2022 走看看