青岛理工大学毕业论文(设计)
String temp; int i=0; //创建一个正则表达式
Pattern p=Pattern.compile(\String result=null; boolean b=true;
while((temp=bufferedReader.readLine())!=null){
i++;
Matcher m=p.matcher(temp); if(m.find()){//如果找到时间点
if(result!=null){
messages.add(result);}
String timeStr=m.group();//把匹配的部分返回一个String Long time=timeToLong(timeStr.substring(1,
timeStr.length()-1));//去掉中括号后转化为long
if(b){times.offer(time);//队列中插入}
String msg=temp.substring(10);//Message为10之后得字符 result=\加上一个换行符}
else{result=result+temp+\没时间点时追加}} messages.add(result); queues.add(times); queues.add(messages);
}catch(Exception e){
e.printStackTrace();} return queues;}
把歌词信息和播放时间与进度条控制信息传递回Activity的主要函数如下: lass UpdateTimeCallback implements Runnable {
33
青岛理工大学毕业论文(设计)
ArrayList
public UpdateTimeCallback(ArrayList
this.queues = queues;}
public void run() {
Queue times = queues.get(0); Queue messages = queues.get(1); // currentTimeMillis()获取当前系统时间,以毫秒
long offset = System.currentTimeMillis() - begin;// 偏移量,从开始播放
到现在一共过了多少时间
if (currentTimeMill == 0) {
nextTimeMill = (Long) times.poll();
// 强制类型转化用Long,nextTimeMill下次歌词更新的时间 message = (String) messages.poll();// 歌词信息}
if (offset >= nextTimeMill)// 偏移时间稍微大于或等于下次歌词更新时
间时更新
{
Intent intent = new Intent(); // 歌词控制
intent.setAction(AppContent.LRC_MESSAGE_ACTION); intent.putExtra(\sendBroadcast(intent);
if (messages != null && times != null) {
message = (String) messages.poll(); nextTimeMill = (Long) times.poll();}}
// 进度条和播放时间控制 Intent intent = new Intent(); // 歌词控制
34
青岛理工大学毕业论文(设计)
}
intent.setAction(AppContent.LRC_MESSAGE_ACTION); intent.putExtra(\durationTime = mediaPlayer.getDuration(); intent.putExtra(\
intent.putExtra(\sendBroadcast(intent);
if (durationTime == mediaPlayer.getCurrentPosition())
stopSelf();
currentTimeMill = currentTimeMill + 10;
handler.postDelayed(updateTimeCallback, 10);// 延后10毫秒再执行一次 }
广播接收器,主要作用是接收Service所发送的广播,并且更新UI,也就是更新TextView,Activity中的接受与处理函数如下:
class LrcMessageBroadcastReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent) {
//从Intent对象中,取出歌词信息,然后更新TextView //System.out.println(\接收到广播启动更新\String lrcMessage=intent.getStringExtra(\lrcTextView.setText(lrcMessage); //设置进度条
int durationTime=intent.getIntExtra(\seekBar.setMax(durationTime);
int playingtime=intent.getIntExtra(\seekBar.setProgress(playingtime); //设置播放时间
int minute=playingtime/1000/60;
35
青岛理工大学毕业论文(设计)
int second=playingtime/1000`; if(second<10)
timeTextView.setText(\
}
}
else timeTextView.setText(\
36