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;
    }
    }
    }

  • 相关阅读:
    第三次作业
    第二实验
    第一次作业
    yii2 Modal的使用
    yii2 显示列表字段 的技巧
    YII2在使用activeForm设置默认值
    html基础1
    tomcat+redis实现session共享缓存
    linux部署mongodb及基本操作
    hadoop 常用命令
  • 原文地址:https://www.cnblogs.com/qikeyishu/p/9190325.html
Copyright © 2011-2022 走看看