文档章节

练习3

 易水寒521
发布于 2015/06/17 15:28
字数 870
阅读 10
收藏 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;  
            }  
        }  
    }  
  
}

© 著作权归作者所有

共有 人打赏支持
粉丝 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
Java——循环应用

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

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

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

漂流的河
2016/12/19
396
7
SQLServer2012单表查询练习

表结构与数据:https://github.com/XuePeng87/TSQLV4 练习1 练习内容:编写一个对Sales.Orders表的查询,返回2015年6月的订单 涉及的表:Sales.Orders 输出的列:orderid, orderdate, custi...

杰克鹏仔
2016/11/10
0
0
SQL-DQL(7)192标准连接

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

小白201808
08/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C++基础知识

链接:https://zhuanlan.zhihu.com/p/38399566 本文主要提一下以下三个区别: 引用必须初始化,而指针可以不初始化。 我们在定义一个引用的时候必须为其指定一个初始值,但是指针却不需要。 ...

悲催的古灵武士
14分钟前
0
0
Oracle备份脚本,保留10天数据

@echo off echo 删除10天前的备分文件和日志forfiles /p "D:\oracleback\backfile" /m *.dmp /d -10 /c "cmd /c del @path" forfiles /p "D:\oracleback\backfile" /m *.log /d -10......

lyle_luo
16分钟前
0
0
window版mysql备份数据

@echo off ::title name title db_backup ::color is green COLOR 2 ::defined value set yy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2% if /i %time:~0,2% lss 10 set hh=0%time:~......

恋码之子
19分钟前
0
0
hashmap嘿嘿嘿

1、jdk1.7 数组加链表 2、链表存放数据:hashcode相同,Entry{key:键 value:值 next:下一个节点} 3、取模算法,计算出存放数组的下标 int index = key.hashCode()%tables.length;...

熊猫你好
32分钟前
0
0
ca证书创建和docker-api证书设置

openssl genrsa -aes256 -out ca-key.pem 4096 // 这一步的密码千万不能忘记,下面要用到 openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem# 国家:CN# 省:.# 市......

chenbaojun
32分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部