package com.liuyang.ClassTest04;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.provider.MediaStore;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
/**
* 音乐播放器界面类
* @author Administrator
*
*/
public class MusicPlayerActivity extends Activity {
private ImageButton startOrPauseButton;
private ImageButton stopButton;
private ImageButton frontButton;
private ImageButton nextButton;
private Button listButton;
private TextView songInfoText;
private TextView songTimeText;
private TextView songVoiceText;
/**工具类的引用*/
private MusicPlayerService mpService;
/**游标的引用,将会在后面通过赋值让它包含歌曲列表信息*/
private Cursor cursor;
/**歌曲播放时间刷新的信号*/
private static final int REFRESHTIME = 0x10000;
/**歌曲的音量,初始值为0.5f*/
private float musicVolume = 0.5f;
/**
* 开启后台服务
*/
private ServiceConnection serviceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder binder) {
mpService = ((MusicPlayerService.LocalBinder)binder).getService();
}
public void onServiceDisconnected(ComponentName className) {
mpService = null;
}
};
/**
* 接受广播
*/
protected BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String actionString = intent.getAction();
//收到的广播消息为:音乐播放准备完成
if (actionString.equals(MusicPlayerService.MUSIC_PREPARED_END)) {
startOrPauseButton.setImageResource(R.drawable.pause);
} else { //收到的广播消息为:当前音乐已经播放完毕
startOrPauseButton.setImageResource(R.drawable.start);
//跳到下一曲
nextMusic();
}
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//给游标赋值,cursor将包含歌曲列表的信息
cursor = MusicListActivity.mCursor;
//开启后台服务
try {
startService(new Intent(this, MusicPlayerService.class));
bindService(new Intent(this, MusicPlayerService.class), serviceConnection, Context.BIND_AUTO_CREATE);
} catch(Exception e) {
Toast.makeText(this, "开启服务失败", Toast.LENGTH_LONG).show();
}
//组件的实例化
startOrPauseButton = (ImageButton)this.findViewById(R.id.start_or_pause_btn);
stopButton = (ImageButton)this.findViewById(R.id.stop_btn);
nextButton = (ImageButton)this.findViewById(R.id.next_btn);
frontButton = (ImageButton)this.findViewById(R.id.front_btn);
listButton = (Button)this.findViewById(R.id.list_btn);
songInfoText = (TextView)this.findViewById(R.id.song_info_text);
songTimeText = (TextView)this.findViewById(R.id.song_time_text);
songVoiceText = (TextView)this.findViewById(R.id.song_voice_text);
//开始/暂停 按钮的事件监听
startOrPauseButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
if (mpService != null && mpService.isPlaying()) {
mpService.pauseMusic();
startOrPauseButton.setImageResource(R.drawable.start);
} else if (mpService != null && MusicListActivity.path != null) {
mpService.setDataPath(MusicListActivity.path);
mpService.startMusic();
//显示当前播放歌曲的曲名
songInfoText.setText(getSongInfo());
//显示播放音量
songVoiceText.setText(String.valueOf((int)(musicVolume * 10)));
startOrPauseButton.setImageResource(R.drawable.pause);
}
}
});
//停止播放按钮事件监听
stopButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
if (mpService != null) {
songTimeText.setText("00:00");
startOrPauseButton.setImageResource(R.drawable.start);
mpService.stopMusic();
}
}
});
//上一曲按钮事件监听
frontButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
if (mpService != null) {
frontMusic();
songInfoText.setText(getSongInfo());
}
}
});
//下一曲按钮事件监听
nextButton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
if (mpService != null) {
nextMusic();
songInfoText.setText(getSongInfo());
}
}
});
//显示列表按钮事件监听
listButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
//跳到MusicListActivity,该界面显示歌曲列表信息
Intent intent = new Intent();
intent.setClass(MusicPlayerActivity.this, MusicListActivity.class);
startActivity(intent);
MusicPlayerActivity.this.finish();
}
});
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(MusicPlayerService.MUSIC_COMPLETED);
intentFilter.addAction(MusicPlayerService.MUSIC_PREPARED_END);
//注册广播接收器
registerReceiver(broadcastReceiver, intentFilter);
//开启线程,更新歌曲播放的时间信息
new Thread(new Runnable() {
public void run() {
while(true) {
Message msg = new Message();
msg.what = MusicPlayerActivity.REFRESHTIME;
//通过Handler发送消息
//此处若直接在线程内更新,则会报错,因为线程不是安全的(自己暂时这样肤浅的理解吧)
MusicPlayerActivity.this.myHandler.sendMessage(msg);
try {
Thread.sleep(1000);
} catch(Exception e) {
e.printStackTrace();
}
}
}
}).start();
}
//接受消息,更新歌曲播放时间信息
Handler myHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == MusicPlayerActivity.REFRESHTIME) {
if(mpService != null && mpService.isPlaying()) {
songTimeText.setText(makeTimeToString(mpService.getCurrentPosition()));
}
}
}
};
//按键弹起事件监听,用于调节音量
public boolean onKeyUp(int keyCode, KeyEvent keyEvent ) {
switch(keyCode) {
case KeyEvent.KEYCODE_DPAD_UP: //增大音量
if (mpService != null) {
musicVolume += 0.1;
mpService.setVolume(musicVolume, musicVolume);
songVoiceText.setText(String.valueOf((int)(musicVolume * 10)));
}
return false;
case KeyEvent.KEYCODE_DPAD_DOWN: //减少音量
if (mpService != null) {
musicVolume -= 0.1;
mpService.setVolume(musicVolume, musicVolume);
songVoiceText.setText(String.valueOf((int)musicVolume * 10));
}
return false;
}
return false;
}
/**
* 下一曲
*/
public void nextMusic() {
if ( ++ MusicListActivity.currentPosition >= cursor.getCount()) {
//当前播放的歌曲为最后一曲
//跳到第一曲
cursor.moveToFirst();
MusicListActivity.currentPosition = 0;
} else {
cursor.moveToPosition(MusicListActivity.currentPosition);
}
//得到下一首歌的文件路径
String uri = cursor.getString(
cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
mpService.setDataPath(uri);
mpService.startMusic();
}
/**
* 上一曲
* 具体参见nextMusic()的实现
*/
public void frontMusic() {
if (MusicListActivity.currentPosition ==0) {
cursor.moveToLast();
MusicListActivity.currentPosition = cursor.getCount() - 1;
} else {
cursor.moveToPosition(Mu
没有合适的资源?快使用搜索试试~ 我知道了~
android简单音乐播放器源码
共55个文件
class:24个
png:15个
java:5个
4星 · 超过85%的资源 需积分: 13 166 下载量 187 浏览量
2011-05-22
21:58:20
上传
评论 3
收藏 109KB RAR 举报
温馨提示
基于android的简单音乐播放器,实现基本功能,新手参考
资源推荐
资源详情
资源评论
收起资源包目录
ClassTest04.0.2.rar (55个子文件)
ClassTest04.0.2
bin
ClassTest04.0.2.apk 43KB
classes.dex 15KB
com
liuyang
ClassTest04
MusicPlayerController.class 1KB
MusicPlayerActivity$9.class 1KB
R$layout.class 442B
MusicPlayerActivity$3.class 1KB
R$id.class 693B
R$drawable.class 587B
MusicPlayerService.class 3KB
MusicPlayerActivity.class 7KB
MusicPlayerActivity$4.class 2KB
MusicPlayerActivity$1.class 1KB
MusicPlayerActivity$2.class 1KB
R$attr.class 355B
MusicPlayerActivity$8.class 1KB
R.class 566B
MusicPlayerService$1.class 928B
MusicPlayerActivity$7.class 1KB
MusicPlayerActivity$6.class 1KB
MusicPlayerService$LocalBinder.class 697B
MusicPlayerService$2.class 921B
R$string.class 442B
MusicPlayerActivity$5.class 1KB
MusicPlayerActivity$10.class 1KB
MusicListAdapter.class 2KB
MusicListActivity.class 3KB
resources.ap_ 34KB
res
drawable-ldpi
next.png 1KB
front.png 1KB
stop.png 2KB
icon.png 4KB
start.png 2KB
pause.png 560B
voice.png 2KB
drawable-hdpi
icon.png 4KB
values
strings.xml 189B
drawable-mdpi
next.png 1KB
front.png 1KB
stop.png 2KB
icon.png 3KB
start.png 2KB
pause.png 560B
voice.png 2KB
layout
musiclist.xml 425B
main.xml 3KB
assets
default.properties 362B
gen
com
liuyang
ClassTest04
R.java 2KB
proguard.cfg 1KB
src
com
liuyang
ClassTest04
MusicPlayerService.java 3KB
MusicListActivity.java 4KB
MusicPlayerController.java 1KB
MusicPlayerActivity.java 9KB
.project 851B
.classpath 280B
AndroidManifest.xml 820B
共 55 条
- 1
LiuYangCcsu
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
前往页