package com.taiyi.DynamicOffice.other.service;
import java.io.File;
import java.io.IOException;
import com.taiyi.DynamicOffice.R;
import com.taiyi.DynamicOffice.other.activity.ResourceActivity;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.os.Handler;
import android.os.IBinder;
public class MusicService extends Service
{
public static MediaPlayer mediaPlayer = new MediaPlayer();
public static int flag = 0;
// public static File mo_curPath = new File(FileUtil.getExternalPath());
// public static File[] mo_fileList = null;
public static String musicname = "";
public static String musicPath = "";
public static int mCurrent = 0;
public static int player_state = 0;
// 定义Handler对象
Handler handler = null;
@Override
public IBinder onBind(Intent arg0)
{
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate()
{
// TODO Auto-generated method stub
super.onCreate();
handler = new Handler();
}
@Override
public void onStart(Intent intent, int startId)
{
// TODO Auto-generated method stub
super.onStart(intent, startId);
handler.post(updatepPaly); // Handler将线程马上加入到线程队列去,没有延时
}
public void onDestroy()
{
// 不需要后台播放时,将这个线程从线程队列中去掉,不会再执行
super.onDestroy();
handler.removeCallbacks(updatepPaly);
// PlayerControl.stop();
}
Runnable updatepPaly = new Runnable()
{
// 匿名内部类方式,实现run()方法
public void run()
{
if (flag == 1)
{ // 点击了List列表中的歌曲时播放相应歌曲,并开始同步歌词、进度条
refreshView();
MusicPlayer();
ResourceActivity.duration.post(ResourceActivity.updatesb);
flag = 0;
}
else if (flag == 2)
{ // 开始/暂停
MusicPlayer();
refreshView();
ResourceActivity.duration.post(ResourceActivity.updatesb);
flag = 0;
}
else if (flag == 3)
{ // 下一首
MusicNext();
refreshView();
ResourceActivity.duration.post(ResourceActivity.updatesb);
flag = 0;
}
else if (flag == 4)
{ // 上一首
MusicBack();
refreshView();
ResourceActivity.duration.post(ResourceActivity.updatesb);
flag = 0;
}
// ===============设置一首歌播放完成监听事件(每播放一首歌曲都会执行这个函数)=====================
mediaPlayer.setOnCompletionListener(new OnCompletionListener()
{
public void onCompletion(MediaPlayer mp)
{
MusicNext();
ResourceActivity.duration.post(ResourceActivity.updatesb);
}
});
handler.postDelayed(updatepPaly, 2000); // 隔3000毫秒就将updateThread这个线程加入到线程队列去
} // (刚开始运行时是在onStart将这个线程加入到消息队列的)
};
public static void MusicPlayer()
{
// musicname = ResourceActivity.mo_fileList[mCurrent].getName();
// ResourceActivity.tv_musicname.setText(musicname);
// musicPath = ResourceActivity.mo_fileList[mCurrent].getPath();
// if (player_state == 0)
// {
if (mediaPlayer.isPlaying())
{
player_state = 1;
ResourceActivity.btnplay.setImageResource(R.drawable.isplaying);
mediaPlayer.pause();
}
try
{
mediaPlayer.reset();
mediaPlayer.setDataSource(musicPath);
mediaPlayer.prepare();
mediaPlayer.start();
ResourceActivity.btnplay.setImageResource(R.drawable.pause1);
}
catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalStateException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
mediaPlayer.setOnCompletionListener(new OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp)
{
// TODO Auto-generated method stub
MusicNext();
}
});
mediaPlayer.setOnErrorListener(new OnErrorListener()
{
@Override
public boolean onError(MediaPlayer mp, int what, int extra)
{
mediaPlayer.reset();
return true;
}
});
// }
ResourceActivity.duration.post(ResourceActivity.updatesb);
}
/**
* 上一首
*/
public static void MusicBack()
{
if (mCurrent == 0)
{
mCurrent = ResourceActivity.mo_fileList.length - 1;
}
else if (mCurrent > 0)
{
// musicPath = ResourceActivity.mo_fileList[ResourceActivity.mCurrent-1].getPath();
// musicname = ResourceActivity.mo_fileList[ResourceActivity.mCurrent-1].getName();
--mCurrent;
}
mediaPlayer.stop();
refreshView();
MusicPlayer();
}
/**
* 下一首
*/
public static void MusicNext()
{
if (ResourceActivity.mo_fileList.length == 1)
{
MusicPlayer();
return;
}
else if (mCurrent == ResourceActivity.mo_fileList.length - 1)
{
mCurrent = 0;
}
else if (mCurrent < ResourceActivity.mo_fileList.length - 1)
{
// musicPath = ResourceActivity.mo_fileList[ResourceActivity.mCurrent+1].getPath();
// musicname = ResourceActivity.mo_fileList[ResourceActivity.mCurrent+1].getName();
mCurrent++;
}
mediaPlayer.stop();
refreshView();
MusicPlayer();
}
/**
* 刷新控件
*/
public static void refreshView()
{
musicPath = ResourceActivity.mo_fileList[mCurrent].getPath();
musicname = ResourceActivity.mo_fileList[mCurrent].getName();
ResourceActivity.tv_musicname.setText(musicname);
ResourceActivity.duration.post(ResourceActivity.updatesb);
}
}
ResourceActivity.java
public static Runnable updatesb = new Runnable()
{
public void run()
{
// 显示当前播放时间、歌曲总时间长度、当前歌曲位置、总歌曲数
// SetSongTime();
int _current = MusicService.mediaPlayer.getCurrentPosition();
maxduration = MusicService.mediaPlayer.getDuration();
duration.setMax(maxduration);
duration.setProgress(_current);
duration.postDelayed(updatesb, 1000);
// 更新SeekBar进度条
// SetSeekBar();
// 同步更新歌词
// SetLrc();
// 播放下一首时,更新滚动的文字
// SetGDview();
// 休眠(隔)50ms再次执行这个函数
// seekBar.postDelayed(updatesb, 1000);
}
};