package com.example.audioplayer;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
import com.example.audioplayer.MusicListAdapter.OnItemClickListener;
import com.example.autioplayer.R;
import android.R.integer;
import android.R.string;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.IntentFilter;
import android.content.Intent;
import android.support.v4.app.TaskStackBuilder;
import android.support.v4.app.TaskStackBuilderHoneycomb;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;
public class PlayerActivity extends Activity {
private static Intent startIntent;
private int playState;
private SeekBar seekBar;
private TextView text_prompt;
private TextView text_listnfo;
private TextView text_sonName;
private TextView text_currentTime;
private TextView text_seekTime;
private TextView text_duration;
private ImageView image_setloopMode;
private MusicListAdapter musicListAdapter;
private int current_id;
private int currentTime;
private int duration;
private int playMode = 3; //播放状态,默认为顺序播放
private boolean canSeek = true;
private Toast mToast;
private List<AudioInfo> audioList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player);
initialize();
}
private void initialize() {
initializeBroadcast();
initializeView();
if(startIntent == null)
{
startIntent = new Intent();
startIntent.setAction("com.example.audioplayer.PLAYER_SERVICE");
startService(startIntent);
}
}
private void initializeView() {
findViewById(R.id.imageView_btn_play_or_pause).setOnClickListener(new ButtonClick());
findViewById(R.id.imageView_btn_stop).setOnClickListener(new ButtonClick());
findViewById(R.id.imageView_btn_back_last).setOnClickListener(new ButtonClick());
findViewById(R.id.imageView_btn_forward_next).setOnClickListener(new ButtonClick());
text_prompt = (TextView)findViewById(R.id.text_prompt);
text_listnfo = (TextView)findViewById(R.id.text_list_info);
text_sonName = (TextView)findViewById(R.id.text_song_name);
text_currentTime = (TextView)findViewById(R.id.text_current_time);
text_duration = (TextView)findViewById(R.id.text_duration);
text_seekTime = (TextView)findViewById(R.id.text_seekTime);
image_setloopMode = (ImageView)findViewById(R.id.image_setloopMode);
image_setloopMode.setOnClickListener(new ButtonClick());
setPlayMode(playMode);
seekBar = (SeekBar) findViewById(R.id.seekBar);
seekBar.setOnSeekBarChangeListener(new ChangeListener());
ListView musicList = (ListView)findViewById(R.id.musiic_list);
audioList = AudioFileService.getAudioInfolist(getApplicationContext());
musicListAdapter = new MusicListAdapter(getApplicationContext(), audioList);
musicList.setAdapter(musicListAdapter);
musicListAdapter.SetOnListItemClickListener(new OnItemClickListener(){
@Override
public void OnClick(int position) {
// TODO Auto-generated method stub
Intent controlIntent = new Intent();
controlIntent.setAction(AppConstant.BroadcastAction.CTL_ACTION);
controlIntent.putExtra("control", AppConstant.PlayerMsg.PLAY_LIST_BY_POS);
controlIntent.putExtra("position", position);
//发送普通广播
sendBroadcast(controlIntent);
}
});
}
public String getAudioName(int index){
if(index >= 0 && index < audioList.size()){
String fileName = audioList.get(index).getName();
return fileName.substring(0, fileName.lastIndexOf('.'));
}
return "";
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_rescan) {
Intent controlIntent = new Intent();
controlIntent.setAction(AppConstant.BroadcastAction.CTL_ACTION);
controlIntent.putExtra("control", AppConstant.PlayerMsg.REQUEST_RELOAD);
sendBroadcast(controlIntent);
return true;
}
if (id == R.id.action_exit) {
stopPlayerService();
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
quit();
}
return false;
}
public void quit(){
// 创建退出对话框
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(
this);
// 设置对话框标题
dialogBuilder.setTitle("提示");
// 设置对话框消息
dialogBuilder.setMessage("确定要退出吗?");
// 添加选择按钮并注册监听
dialogBuilder.setNeutralButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
stopPlayerService();
finish();
}
});
dialogBuilder.setNegativeButton("取消", null);
// 显示对话框
dialogBuilder.create().show();
}
protected void stopPlayerService() {
Intent controlIntent = new Intent();
controlIntent.setAction(AppConstant.BroadcastAction.CTL_ACTION);
controlIntent.putExtra("control", AppConstant.PlayerMsg.STOP_MSG);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if(startIntent != null)
{
startIntent = new Intent();
startIntent.setAction("com.example.audioplayer.PLAYER_SERVICE");
stopService(startIntent);
startIntent = null;
}
}
}, 500);
}
public void setButtonIcon(int playSate) {
ImageView imageView = (ImageView)findViewById(R.id.imageView_btn_play_or_pause);
if(playSate == AppConstant.PlayState.PLAYING)
imageView.setImageResource(R.drawable.btn_pause);
else
imageView.setImageResource(R.drawable.btn_play);
}
public void setPlayMode(int playMode) {
Intent controlIntent = new Intent();
controlIntent.setAction(AppConstant.BroadcastAction.CTL_ACTION);
controlIntent.putExtra("control", AppConstant.PlayerMsg.PLAY_MODE_CHANGE);
controlIntent.putExtra("palayMode", playMode);
sendBroadcast(controlIntent);
int ids[] = {R.drawable.image_songlop_play, R.drawable.image_listloop_play,
R.drawable.image_order_play, R.drawable.image_random_play};
String prompts[] = {"单曲循环", "列表循环", "顺序播放", "随机播放"};
showToast(prompts[playMode-1]);
image_setloopMode.setImageResource(ids[playMode-1]);
}
class ButtonClick implements android.view.View.OnClickListener{
@Override
public void onClick(View v) {
Intent controlIntent = new Intent();
switch (v.getId()) {
case R.id.imageView_btn_play_or_pause:
//设置Intent的Action属性
controlIntent.setAction(AppConstant.BroadcastAction.CTL_ACTION);
controlIntent.putExtra("control", AppConstant.PlayerMsg.PLAY_MSG);
break;
case R.id.imageView_btn_stop:
//设置Intent的Action属性
controlIntent.setAction(AppConstant.BroadcastAction.CTL_ACTION);
controlIntent.putExtra("control", AppConstant.PlayerMsg.STOP_MSG);
break;
case R.id.imageView_btn_back_last:
//设置Intent的Action属性
controlIntent.setAction(AppConstant.BroadcastAction.CTL_ACTION);
controlIntent.putExtra("control", AppConstant.PlayerMsg.PRIVIOUS_MSG);
break;
case R.id.imageView_btn_forward_next:
//设置Intent的Action属性
controlIntent.setAction(AppConstant.BroadcastAction.CTL_ACTION);
controlIntent.putExtra("control", AppConstant.PlayerMsg.NEXT_MSG);
break;
case R.id.image_setloopMode:
playMode;
if(playMode > 4)
playMode = 1;
setPlayMode(playMode);
break;
default:
break;
}
//发送普通广播
sendBroadcast(controlIntent);
}
}
public void initializeBroadcast(){
BroadcastReceiver updateReceiver = new BroadcastReceiver() {
Handler handler;
Runnable runnable;
@Override
public void onReceive(Context context, Intent intent) {
playState = intent.getIntExtra("playState", 0);
current_id = intent.getIntExtra("MUSIC_ID", 0);
setButtonIcon(playState);
int listSize = 0;
if(audioList != null)
listSize = audioList.size();
text_listnfo.setText((listSize > 0?current_id 1:0) " / " listSize);
text_sonName.setText(getAudioName(current_id));
if(listSize == 0){
text_currentTime.setText("00:00");
text_duration.setText("00:00");
}
if(intent.getBooleanExtra("loading", false)){
text_prompt.setText("正在扫描本地音乐,已经找到" listSize "首歌曲");
musicListAdapter.notifyDataSetChanged();
System.out.println("---------------------------------");
}
else if(intent.getBooleanExtra("loaded", false)){
text_prompt.setText("共找到" listSize "首音乐");
if(handler != null){
handler.removeCallbacks(runnable);
}
colsePrompt();
}
}
protected void colsePrompt() {
handler = new Handler();
runnable = new Runnable(){
public void run() {
text_prompt.setText("");
}
};
handler.postDelayed(runnable, 3000);
}
};
registerBoradcastReceiver(updateReceiver, AppConstant.BroadcastAction.UPDATE_ACTION);
BroadcastReceiver musicCurrentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
currentTime = intent.getIntExtra("currentTime", 0);
if(duration > 0 && canSeek)
seekBar.setProgress((int)(100.0f * currentTime / duration));
text_currentTime.setText(getTimeString(currentTime));
}
};
registerBoradcastReceiver(musicCurrentReceiver, AppConstant.BroadcastAction.MUSIC_CURRENT_TIME);
BroadcastReceiver musicDurationReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
duration = intent.getIntExtra("duration", 0);
text_duration.setText(getTimeString(duration));
}
};
registerBoradcastReceiver(musicDurationReceiver, AppConstant.BroadcastAction.MUSIC_DURATION);
}
public void registerBoradcastReceiver(BroadcastReceiver mBroadcastReceiver, String ACTION_NAME){
IntentFilter myIntentFilter = new IntentFilter();
myIntentFilter.addAction(ACTION_NAME);
//注册广播
registerReceiver(mBroadcastReceiver, myIntentFilter);
}
class ChangeListener implements OnSeekBarChangeListener {
int time;
/**
* 拖动条停止拖动的时候调用
*/
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
text_seekTime.setText("");
currentTime = this.time;
setPlaySeek(currentTime);
canSeek = true;
}
/**
* 拖动条开始拖动的时候调用
*/
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
canSeek = false;
}
/**
* 拖动条进度改变的时候调用
*/
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(!canSeek) {
this.time = (int)(progress / 100.0f * duration);
text_seekTime.setText(getTimeString(this.time));
}
}
}
public void setPlaySeek(int seek) {
Intent controlIntent = new Intent();
controlIntent.setAction(AppConstant.BroadcastAction.CTL_ACTION);
controlIntent.putExtra("control", AppConstant.PlayerMsg.PROGRESS_CHANGE);
controlIntent.putExtra("progress", seek);
sendBroadcast(controlIntent);
};
/**
* 显示Toast
*/
private void showToast(String msg){
if(mToast == null){
mToast = Toast.makeText(this, msg, Toast.LENGTH_SHORT);
}else{
mToast.setText(msg);
}
mToast.show();
}
private String getTimeString(int time_ms) {
time_ms = time_ms / 1000;
return String.format("%02d:%02d", time_ms / 60, time_ms % 60);
}
}
评论