文档章节

练习3

 易水寒521
发布于 2015/06/17 15:28
字数 870
阅读 11
收藏 0
package com.anhui.music_player.util;
import java.util.List; 
import com.anhui.music_player.model.Music;
import android.app.Service;  
import android.content.BroadcastReceiver;  
import android.content.Context;  
import android.content.Intent;  
import android.content.IntentFilter;  
import android.media.MediaPlayer;  
import android.media.MediaPlayer.OnCompletionListener;  
import android.media.MediaPlayer.OnPreparedListener;  
import android.os.Handler;  
import android.os.IBinder;  
import android.util.Log;
public class PlayerService extends Service {  
    private MediaPlayer mediaPlayer; // 媒体播放器对象  
    private String path;            // 音乐文件路径  
    private boolean isPause;        // 暂停状态  
    private int current = 0;        // 记录当前正在播放的音乐  
    private List<Music> mp3Infos;   //存放Mp3Info对象的集合  
    private int status = 3;         //播放状态,默认为顺序播放  
    private MyReceiver myReceiver;  //自定义广播接收器  
    private int currentTime;        //当前播放进度  
    private int duration;           //播放长度  
      
    //服务要发送的一些Action  
    public static final String UPDATE_ACTION = "com.wwj.action.UPDATE_ACTION";  //更新动作  
    public static final String CTL_ACTION = "com.wwj.action.CTL_ACTION";        //控制动作  
    public static final String MUSIC_CURRENT = "com.wwj.action.MUSIC_CURRENT";  //当前音乐播放时间更新动作  
    public static final String MUSIC_DURATION = "com.wwj.action.MUSIC_DURATION";//新音乐长度更新动作  
      
    /** 
     * handler用来接收消息,来发送广播更新播放时间 
     */  
    private Handler handler = new Handler() {  
        public void handleMessage(android.os.Message msg) {  
            if (msg.what == 1) {  
                if(mediaPlayer != null) {  
                    currentTime = mediaPlayer.getCurrentPosition(); // 获取当前音乐播放的位置  
                    Intent intent = new Intent();  
                    intent.setAction(MUSIC_CURRENT);  
                    intent.putExtra("currentTime", currentTime);  
                    sendBroadcast(intent); // 给PlayerActivity发送广播  
                    handler.sendEmptyMessageDelayed(1, 1000);  
                }  
                  
            }  
        };  
    };  
  
    @Override  
    public void onCreate() {  
        super.onCreate();  
        Log.d("service", "service created");  
        mediaPlayer = new MediaPlayer();  
        mp3Infos =MusicList.getMusicData(this); 
          
  
        /** 
         * 设置音乐播放完成时的监听器 
         */  
        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {  
  
            @Override  
            public void onCompletion(MediaPlayer mp1) {  
                if (status == 1) { // 单曲循环  
                    mediaPlayer.start();  
                } 
                else if (status == 2) { // 全部循环  
                    current++;  
                    if(current > mp3Infos.size() - 1) {  //变为第一首的位置继续播放  
                        current = 0;  
                    }  
              
                } else if (status == 3) { // 顺序播放  
                    current++;  //下一首位置  
                    if (current <= mp3Infos.size() - 1) {  
                        Intent sendIntent = new Intent(UPDATE_ACTION);  
                        sendIntent.putExtra("current", current);  
                        // 发送广播,将被Activity组件中的BroadcastReceiver接收到  
                        sendBroadcast(sendIntent);  
                        path = mp3Infos.get(current).getUrl();  
                        play(0);  
                    }else {  
                        mediaPlayer.seekTo(0);  
                        current = 0;  
                        Intent sendIntent = new Intent(UPDATE_ACTION);  
                        sendIntent.putExtra("current", current);  
                        // 发送广播,将被Activity组件中的BroadcastReceiver接收到  
                        sendBroadcast(sendIntent);  
                    }  
                } else if(status == 4) {    //随机播放  
                    current = getRandomIndex(mp3Infos.size() - 1);  
                    System.out.println("currentIndex ->" + current);  
                    Intent sendIntent = new Intent(UPDATE_ACTION);  
                    sendIntent.putExtra("current", current);  
                    // 发送广播,将被Activity组件中的BroadcastReceiver接收到  
                    sendBroadcast(sendIntent);  
                    path = mp3Infos.get(current).getUrl();  
                    play(0);  
                }  
            }  
        });  
  
        myReceiver = new MyReceiver();  
        IntentFilter filter = new IntentFilter();
        registerReceiver(myReceiver, filter);  
    }  
  
    /** 
     * 获取随机位置 
     * @param end 
     * @return 
     */  
    protected int getRandomIndex(int end) {  
        int index = (int) (Math.random() * end);  
        return index;  
    }  
  
    @Override  
    public IBinder onBind(Intent arg0) {  
        return null;  
    }  
  
 
    /** 
     * 播放音乐 
     *  
     * @param position 
     */  
    private void play(int currentTime) {  
        try {  
            mediaPlayer.reset();// 把各项参数恢复到初始状态  
            mediaPlayer.setDataSource(path);  
            mediaPlayer.prepare(); // 进行缓冲  
            mediaPlayer.setOnPreparedListener(new PreparedListener(currentTime));// 注册一个监听器  
            handler.sendEmptyMessage(1);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
    /** 
     * 暂停音乐 
     */  
    private void pause() {  
        if (mediaPlayer != null && mediaPlayer.isPlaying()) {  
            mediaPlayer.pause();  
            isPause = true;  
        }  
    }  
  
    private void resume() {  
        if (isPause) {  
            mediaPlayer.start();  
            isPause = false;  
        }  
    }  
  
    /** 
     * 上一首 
     */  
    private void previous() {  
        Intent sendIntent = new Intent(UPDATE_ACTION);  
        sendIntent.putExtra("current", current);  
        // 发送广播,将被Activity组件中的BroadcastReceiver接收到  
        sendBroadcast(sendIntent);  
        play(0);  
    }  
  
    /** 
     * 下一首 
     */  
    private void next() {  
        Intent sendIntent = new Intent(UPDATE_ACTION);  
        sendIntent.putExtra("current", current);  
        // 发送广播,将被Activity组件中的BroadcastReceiver接收到  
        sendBroadcast(sendIntent);  
        play(0);  
    }  
  
    /** 
     * 停止音乐 
     */  
    private void stop() {  
        if (mediaPlayer != null) {  
            mediaPlayer.stop();  
            try {  
                mediaPlayer.prepare(); // 在调用stop后如果需要再次通过start进行播放,需要之前调用prepare函数  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
    }  
  
    @Override  
    public void onDestroy() {  
        if (mediaPlayer != null) {  
            mediaPlayer.stop();  
            mediaPlayer.release();  
            mediaPlayer = null;  
        }  
          
    }  
  
    /** 
     *  
     * 实现一个OnPrepareLister接口,当音乐准备好的时候开始播放 
     *  
     */  
    private final class PreparedListener implements OnPreparedListener {  
        private int currentTime;  
  
        public PreparedListener(int currentTime) {  
            this.currentTime = currentTime;  
        }  
  
        @Override  
        public void onPrepared(MediaPlayer mp) {  
            mediaPlayer.start(); // 开始播放  
            if (currentTime > 0) { // 如果音乐不是从头播放  
                mediaPlayer.seekTo(currentTime);  
            }  
            Intent intent = new Intent();  
            intent.setAction(MUSIC_DURATION);  
            duration = mediaPlayer.getDuration();  
            intent.putExtra("duration", duration);  //通过Intent来传递歌曲的总长度  
            sendBroadcast(intent);  
        }  
    }  
  
    public class MyReceiver extends BroadcastReceiver {  
  
        @Override  
        public void onReceive(Context context, Intent intent) {  
            int control = intent.getIntExtra("control", -1);  
            switch (control) {  
            case 1:  
                status = 1; // 将播放状态置为1表示:单曲循环  
                break;  
            case 2:  
                status = 2; //将播放状态置为2表示:全部循环  
                break;  
            case 3:  
                status = 3; //将播放状态置为3表示:顺序播放  
                break;  
            case 4:  
                status = 4; //将播放状态置为4表示:随机播放  
                break;  
            }  
        }  
    }  
  
}

© 著作权归作者所有

共有 人打赏支持
上一篇: 练习4
下一篇: 练习2
粉丝 0
博文 130
码字总数 120077
作品 0
虹口
私信 提问
python—函数实例

1.函数的定义 练习:判断输入的是不是一个数字 #!/usr/bin/env pythondef isNum():sth = raw_input("Please input something: ")try:if type(int(sth)) == type(1):print "%s is a number" ......

huangzp168
2017/12/01
0
0
开发中遇到的拼凑json的问题,求大神帮忙解决下。

json1={ "styleID": "2", "Type": "ATEST", "StyleName": "单选题", "CptItems": [ { "srcID": 1, "srcName": "强化练习", "sbjID": 2, "sbjName": "强化练习", "TestCount": 17 }, { "srcI......

漂流的河
2016/12/19
412
7
Java——循环应用

循环练习 练习一:计算1~100之间奇数和的运算 /*计算1~100之间奇数和的运算思路:1、需要定义一个变量来初始化和并记录和,sum 2、计算1~100之间的数需要使用for循环来控制相加的次数 3、需要...

Sweltering
2017/12/12
0
0
金蝶K/3 BOS产品培训教案

K/3 BOS产品培训教案 1 K/3 BOS IDE练习案例... 2 1.1新建基础资料... 2 1.1.1新增基础资料交货地点... 2 1.2新建业务单据... 2 1.2.1新建寄存入库单,寄存入库单字段信息描述... 2 1.2.2练习...

mengyinxue
07/06
0
0
SQL-DQL(7)192标准连接

1. 含义:连接查询又称多表查询,当查询的字段来自多个表时,就会用到连接查询。 2.笛卡尔乘积现象:表1 有M行,表2 有N行,那么结果就有M*N行。 3. 分类: 4. SQL192标准的学习 4-1. 等值连...

小白201808
08/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

起薪2万的爬虫工程师,Python需要学到什么程度才可以就业?

爬虫工程师的的薪资为20K起,当然,因为大数据,薪资也将一路上扬。那么,Python需要学到什么程度呢?今天我们来看看3位前辈的回答。 1、前段时间快要毕业,而我又不想找自己的老本行Java开发...

糖宝lsh
17分钟前
1
0
携手开发者共建云生态 首届腾讯云+社区开发者大会在京举办

本文由云+社区发表 北京时间12月15日,由腾讯云主办,极客邦科技、微信、腾讯TEG协办的首届腾讯云+社区开发者大会在北京朝阳悠唐皇冠假日酒店举办。在会上,腾讯云发布了重磅产品开发者平台以...

腾讯云加社区
37分钟前
1
0
人工智能时代员工如何证明其IT工作价值

机器人可以取代你的工作吗?你能帮助机器人完成它的工作吗?如果你正在考虑自己的职业生涯以及今后将如何发展,那么应该询问自己这些问题了。 机器人可以取代你的工作吗?你能帮助机器人完成它的...

Linux就该这么学
39分钟前
2
0
CPU性能过剩提升乏力影响未来行业发展吗?

虽然CPU仍然在不断发展,但是它的性能已经不再仅仅受限于单个处理器类型或制造工艺上了。和过去相比,CPU性能提升的步伐明显放缓了,接下来怎么办,成为横亘在整个行业面前的大问题。 自201...

linuxCool
50分钟前
2
0
使用Autowired和Qualifier解决多个相同类型的bean如何共存的问题

注意: 实现类UserServiceImpl,MyUserServiceImpl 需要区分:@Service("userServicel") @Service("myUserService") https://blog.csdn.net/russle/article/details/80287763......

qimh
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部