package com.alex.media;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.TreeMap;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class MusicActivity extends Activity {
private int[] _ids;
private int position;
private String _titles[] = null;
private Uri uri;
private ImageButton playBtn = null;//播放、暂停
//private Button stopBtn = null;//停止
private ImageButton latestBtn = null;//上一首
private ImageButton nextBtn = null;//下一首
private ImageButton forwardBtn = null;//快进
private ImageButton rewindBtn = null;//快退
private TextView lrcText = null;//歌词文本
private TextView playtime = null;//已播放时间
private TextView durationTime = null;//歌曲时间
private SeekBar seekbar = null;//歌曲进度
private SeekBar soundBar = null;//音量调节
private Handler handler = null;//用于进度条
private Handler fHandler = null;//用于快进
private int currentPosition;//当前播放位置
private int duration;
private DBHelper dbHelper = null;
private TextView name = null;
private GestureDetector gestureDetector;
private TreeMap<Integer, LRCbean> lrc_map = new TreeMap<Integer, LRCbean>();
private Cursor myCur;
private static final String MUSIC_CURRENT = "com.alex.currentTime";
private static final String MUSIC_DURATION = "com.alex.duration";
private static final String MUSIC_NEXT = "com.alex.next";
private static final String MUSIC_UPDATE = "com.alex.update";
private static final int MUSIC_PLAY = 1;
private static final int MUSIC_PAUSE = 2;
private static final int MUSIC_STOP = 3;
private static final int PROGRESS_CHANGE = 4;
private static final int MUSIC_REWIND = 5;
private static final int MUSIC_FORWARD = 6;
private static final int STATE_PLAY = 1;
private static final int STATE_PAUSE = 2;
private int flag;
//关于音量的变量
private AudioManager mAudioManager = null;
private int maxVolume;//最大音量
private int currentVolume;//当前音量
@Override
protected void onCreate(Bundle savedInstanceState) {
//调用父类oncreate方法,并创建界面
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
//从intent中取得传递来的数据
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
_ids = bundle.getIntArray("_ids");
position = bundle.getInt("position");
_titles = bundle.getStringArray("_titles");
//初始化各个控件
lrcText = (TextView)findViewById(R.id.lrc);
name = (TextView)findViewById(R.id.name);
playtime = (TextView)findViewById(R.id.playtime);//已经播放的时间
durationTime = (TextView)findViewById(R.id.duration);
//获取媒体音量
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);//获得最大音量
currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);//获得当前音量
//TODO 手势识别
gestureDetector=new GestureDetector(new ChangeGestureDetector(this));
//设置播放按钮
playBtn = (ImageButton)findViewById(R.id.playBtn);
playBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//flag表示现在歌曲的播放状态
switch (flag) {
case STATE_PLAY:
pause();
break;
case STATE_PAUSE:
play();
break;
}
}
});
seekbar = (SeekBar)findViewById(R.id.seekbar);
seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar seekBar) {
play();
}
public void onStartTrackingTouch(SeekBar seekBar) {
pause();
}
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if (fromUser){
seekbar_change(progress);
}
}
});
rewindBtn = (ImageButton)findViewById(R.id.rewindBtn);
rewindBtn.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
pause();
rewind();
break;
case MotionEvent.ACTION_UP:
play();
break;
}
return true;
}
});
forwardBtn = (ImageButton)findViewById(R.id.forwardBtn);
forwardBtn.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
pause();
forward();
break;
case MotionEvent.ACTION_UP:
play();
break;
}
return true;
}
});
latestBtn = (ImageButton)findViewById(R.id.latestBtn);
latestBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
latestOne();
}
});
nextBtn = (ImageButton)findViewById(R.id.nextBtn);
nextBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
nextOne();
}
});
}
@Override
protected void onStart() {
super.onStart();
setup();
play();
}
/**
* 重新设置seekbar, name(TextView), 告知Service重新为MediaPlayer设置新的资源
* */
private void loadClip(){
//seekbar指针指0
seekbar.setProgress(0);
//int pos = _ids[position];
//重新设置歌曲名
name.setText(_titles[position]);
//将要播放的歌曲的id position 发送给歌曲播放Service
Intent intent = new Intent();
intent.putExtra("_ids", _ids);
intent.putExtra("position", position);
intent.setAction("com.alex.media.MUSIC_SERVICE");
startService(intent);
}
/**
* 注册广播接收器
* */
private void init(){
IntentFilter filter = new IntentFilter();
filter.addAction(MUSIC_CURRENT);
filter.addAction(MUSIC_DURATION);
filter.addAction(MUSIC_NEXT);
filter.addAction(MUSIC_UPDATE);
registerReceiver(musicReceiver, filter);
}
private void setup(){
//获取歌词文件
refreshView();
//
loadClip();
init();
}
/**
* 音乐播放
*/
private void play(){
//开始播放,将flag的状态改变
flag = STATE_PLAY;
//将播放按键的背景图片换为暂停图片
playBtn.setBackgroundResource(R.drawable.pause_selecor);
//启动歌曲播放Service
Intent intent = new Intent();
intent.setAction("com.alex.media.MUSIC_SERVICE");
intent.putExtra("op",MUSIC_PLAY);
startService(intent);
}
/**
* 音乐暂停
*/
private void pause(){
flag = STATE_PAUSE;
playBtn.setBackgroundResource(R.drawable.play_selecor);
Intent intent = new Intent();
intent.setAction("com.alex.media.MUSIC_SERVICE");
intent.putExtra("op",MUSIC_PAUSE);
startService(intent);
}
/**
* 音乐停止
*/
private void stop(){
unregisterReceiver(musicReceiver);
Intent intent = new Intent();
intent.setAction("com.alex.media.MUSIC_SERVICE");
intent.putExtra("op", MUSIC_STOP);
startService(intent);
}
/**
* 用户拖动进度条
*/
private void seekbar_change(int progress){
Intent intent = new Intent();
intent.setAction("com.alex.media.MUSIC_SERVICE");
intent.putExtra("op", PROGRESS_CHANGE);
intent
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
android 音乐播放器 绝对好用 完整代码 (140个子文件)
resources.ap_ 243KB
com.alex.media.MainActivity.apk 272KB
jarlist.cache 119B
MusicActivity.class 14KB
TestMain.class 12KB
MusicService.class 10KB
ArtistActivity.class 7KB
AlbumActivity.class 7KB
RecentlyActivity.class 6KB
ClicksActivity.class 6KB
MainActivity.class 5KB
MusicListAdapter.class 3KB
DBHelper.class 3KB
ScanSdReceiver.class 3KB
AlbumListAdapter.class 3KB
MusicActivity$1.class 3KB
RecentlyActivity$ListItemClickListener.class 2KB
MainActivity$1.class 2KB
ClicksActivity$ListItemClickListener.class 2KB
TestMain$ContextMenuListener.class 2KB
ArtistListAdapter.class 2KB
ArtistActivity$ContextMenuListener.class 2KB
AlbumActivity$ContextMenuListener.class 2KB
TestMain$ArtistsItemClickListener.class 2KB
TestMain$AlbumsItemClickListener.class 2KB
TestMain$1.class 1KB
MusicService$4.class 1KB
MusicService$3.class 1KB
R$drawable.class 1KB
ArtistActivity$1.class 1KB
AlbumActivity$1.class 1KB
MusicActivity$3.class 1KB
ArtistActivity$ListItemClickListener.class 1KB
AlbumActivity$ListItemClickListener.class 1KB
TestMain$2.class 1KB
TestMain$ListItemClickListener.class 1KB
ChangeGestureDetector.class 1KB
MusicService$2.class 1KB
MusicService$1.class 1KB
MusicActivity$4.class 1KB
MusicActivity$5.class 1KB
R$id.class 1022B
LRCbean.class 974B
MusicActivity$2.class 918B
MusicService$5.class 914B
MusicActivity$6.class 788B
MusicActivity$7.class 786B
R$layout.class 513B
R.class 503B
R$string.class 415B
BuildConfig.class 337B
R$attr.class 328B
.classpath 364B
classes.dex 55KB
Media_Player.jad 47B
MusicActivity.java 15KB
TestMain.java 13KB
MusicService.java 11KB
MainActivity.java 6KB
RecentlyActivity.java 5KB
ClicksActivity.java 5KB
ArtistActivity.java 5KB
AlbumActivity.java 5KB
MusicListAdapter.java 4KB
R.java 4KB
AlbumListAdapter.java 3KB
ScanSdReceiver.java 3KB
DBHelper.java 2KB
ArtistListAdapter.java 1KB
ChangeGestureDetector.java 908B
LRCbean.java 534B
BuildConfig.java 156B
listbg1.png 116KB
listbg1.png 115KB
listbg.png 41KB
bg.png 40KB
listbg.png 38KB
bg.png 37KB
music.png 12KB
music.png 9KB
music.png 6KB
music.png 6KB
item.png 4KB
isplaying.png 4KB
latest1.png 4KB
next1.png 4KB
play1.png 4KB
pause1.png 3KB
music.png 3KB
music.png 3KB
button.png 3KB
play.png 3KB
next.png 3KB
latest.png 3KB
foward.png 3KB
rewind.png 3KB
pause.png 3KB
icon.png 3KB
icon.png 2KB
media_player_progress_bg.png 2KB
共 140 条
- 1
- 2
资源评论
- newledge2014-05-31运行不了,不知道为什么呢,
- 疯狂代码2013-01-10代码很清晰,不过为啥在我的环境里加载不上呢?郁闷!
Regans
- 粉丝: 4
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功