import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;
import com.wwj.sb.domain.AppConstant;
import com.wwj.sb.domain.Mp3Info;
import com.wwj.sb.utils.MediaUtil;
/**
-
播放音乐界面
-
@author wwj
-
从主界面传递过来歌曲的Id、歌曲名、歌手、歌曲路径、播放状态
*/
public class PlayerActivity extends Activity{
private TextView musicTitle = null;
private TextView musicArtist = null;
private Button previousBtn; // 上一首
private Button repeatBtn; // 重复(单曲循环、全部循环)
private Button playBtn; // 播放(播放、暂停)
private Button shuffleBtn; // 随机播放
private Button nextBtn; // 下一首
private Button searchBtn; //查找歌曲
private Button queueBtn; //歌曲列表
private SeekBar music_progressBar; //歌曲进度
private TextView currentProgress; //当前进度消耗的时间
private TextView finalProgress; //歌曲时间
private String title; //歌曲标题
private String artist; //歌曲艺术家
private String url; //歌曲路径
private int listPosition; //播放歌曲在mp3Infos的位置
private int currentTime; //当前歌曲播放时间
private int duration; //歌曲长度
private int flag; //播放标识
private int repeatState;
private final int isCurrentRepeat = 1; // 单曲循环
private final int isAllRepeat = 2; // 全部循环
private final int isNoneRepeat = 3; // 无重复播放
private boolean isPlaying; // 正在播放
private boolean isPause; // 暂停
private boolean isNoneShuffle; // 顺序播放
private boolean isShuffle; // 随机播放
private List mp3Infos;
private PlayerReceiver playerReceiver;
public static final String UPDATE_ACTION = “com.wwj.action.UPDATE_ACTION”; //更新动作
public static final String CTL_ACTION = “com.wwj.action.CTL_ACTION”; //控制动作
public static final String MUSIC_CURRENT = “com.wwj.action.MUSIC_CURRENT”; //音乐当前时间改变动作
public static final String MUSIC_DURATION = “com.wwj.action.MUSIC_DURATION”;//音乐播放长度改变动作
public static final String MUSIC_PLAYING = “com.wwj.action.MUSIC_PLAYING”; //音乐正在播放动作
public static final String REPEAT_ACTION = “com.wwj.action.REPEAT_ACTION”; //音乐重复播放动作
public static final String SHUFFLE_ACTION = “com.wwj.action.SHUFFLE_ACTION”;//音乐随机播放动作
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.play_activity_layout);
musicTitle = (TextView) findViewById(R.id.musicTitle);
musicArtist = (TextView) findViewById(R.id.musicArtist);
findViewById();
setViewOnclickListener();
mp3Infos = MediaUtil.getMp3Infos(PlayerActivity.this);
playerReceiver = new PlayerReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(UPDATE_ACTION);
filter.addAction(MUSIC_CURRENT);
filter.addAction(MUSIC_DURATION);
registerReceiver(playerReceiver, filter);
}
/**
- 从界面上根据id获取按钮
*/
private void findViewById() {
previousBtn = (Button) findViewById(R.id.previous_music);
repeatBtn = (Button) findViewById(R.id.repeat_music);
playBtn = (Button) findViewById(R.id.play_music);
shuffleBtn = (Button) findViewById(R.id.shuffle_music);
nextBtn = (Button) findViewById(R.id.next_music);
searchBtn = (Button) findViewById(R.id.search_music);
queueBtn = (Button) findViewById(R.id.play_queue);
music_progressBar = (SeekBar) findViewById(R.id.audioTrack);
currentProgress = (TextView) findViewById(R.id.current_progress);
finalProgress = (TextView) findViewById(R.id.final_progress);
}
/**
- 给每一个按钮设置监听器
*/
private void setViewOnclickListener() {
ViewOnclickListener ViewOnClickListener = new ViewOnclickListener();
previousBtn.setOnClickListener(ViewOnClickListener);
repeatBtn.setOnClickListener(ViewOnClickListener);
playBtn.setOnClickListener(ViewOnClickListener);
shuffleBtn.setOnClickListener(ViewOnClickListener);
nextBtn.setOnClickListener(ViewOnClickListener);
searchBtn.setOnClickListener(ViewOnClickListener);
queueBtn.setOnClickListener(ViewOnClickListener);
music_progressBar.setOnSeekBarChangeListener(new SeekBarChangeListener());
}
/**
- 在OnResume中初始化和接收Activity数据
*/
@Override
protected void onResume() {
super.onResume();
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
title = bundle.getString(“title”);
artist = bundle.getString(“artist”);
url = bundle.getString(“url”);
listPosition = bundle.getInt(“listPosition”);
repeatState = bundle.getInt(“repeatState”);
isShuffle = bundle.getBoolean(“shuffleState”);
flag = bundle.getInt(“MSG”);
currentTime = bundle.getInt(“currentTime”);
duration = bundle.getInt(“duration”);
initView();
}
/**
- 初始化界面
*/
public void initView() {
musicTitle.setText(title);
musicArtist.setText(artist);
music_progressBar.setProgress(currentTime);
music_progressBar.setMax(duration);
switch (repeatState) {
case isCurrentRepeat: // 单曲循环
shuffleBtn.setClickable(false);
repeatBtn.setBackgroundResource(R.drawable.repeat_current_selector);
break;
case isAllRepeat: // 全部循环
shuffleBtn.setClickable(false);
repeatBtn.setBackgroundResource(R.drawable.repeat_all_selector);
break;
case isNoneRepeat: // 无重复
shuffleBtn.setClickable(true);
repeatBtn.setBackgroundResource(R.drawable.repeat_none_selector);
break;
}
if(isShuffle) {
isNoneShuffle = false;
shuffleBtn.setBackgroundResource(R.drawable.shuffle_selector);
repeatBtn.setClickable(false);
} else {
isNoneShuffle = true;
shuffleBtn.setBackgroundResource(R.drawable.shuffle_none_selector);
repeatBtn.setClickable(true);
}
if(flag == AppConstant.PlayerMsg.PLAYING_MSG) { //如果播放信息是正在播放
Toast.makeText(PlayerActivity.this, “正在播放–” + title, 1).show();
}
else if(flag == AppConstant.PlayerMsg.PLAY_MSG) { //如果是点击列表播放歌曲的话
play();
}
playBtn.setBackgroundResource(R.drawable.play_selector);
isPlaying = true;
isPause = false;
}
/**
- 反注册广播
*/
@Override
protected void onStop() {
super.onStop();
unregisterReceiver(playerReceiver);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
/**
-
控件点击事件
-
@author wwj
*/
private class ViewOnclickListener implements OnClickListener {
Intent intent = new Intent();
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.play_music:
if (isPlaying) {
playBtn.setBackgroundResource(R.drawable.pause_selector);
intent.setAction(“com.wwj.media.MUSIC_SERVICE”);
intent.putExtra(“MSG”, AppConstant.PlayerMsg.PAUSE_MSG);
startService(intent);
isPlaying = false;
isPause = true;
} else if (isPause) {
playBtn.setBackgroundResource(R.drawable.play_selector);
intent.setAction(“com.wwj.media.MUSIC_SERVICE”);
intent.putExtra(“MSG”, AppConstant.PlayerMsg.CONTINUE_MSG);
startService(intent);
isPause = false;
isPlaying = true;
}
break;
case R.id.previous_music: //上一首歌曲
previous_music();
break;
case R.id.next_music: //下一首歌曲
next_music();
break;
case R.id.repeat_music: //重复播放音乐
if (repeatState == isNoneRepeat) {
repeat_one();
shuffleBtn.setClickable(false); //是随机播放变为不可点击状态
repeatState = isCurrentRepeat;
} else if (repeatState == isCurrentRepeat) {
repeat_all();
shuffleBtn.setClickable(false);
repeatState = isAllRepeat;
} else if (repeatState == isAllRepeat) {
repeat_none();
shuffleBtn.setClickable(true);
repeatState = isNoneRepeat;
}
Intent intent = new Intent(REPEAT_ACTION);
switch (repeatState) {
case isCurrentRepeat: // 单曲循环
repeatBtn
.setBackgroundResource(R.drawable.repeat_current_selector);
Toast.makeText(PlayerActivity.this, R.string.repeat_current,
Toast.LENGTH_SHORT).show();
intent.putExtra(“repeatState”, isCurrentRepeat);
sendBroadcast(intent);
break;
case isAllRepeat: // 全部循环
repeatBtn
.setBackgroundResource(R.drawable.repeat_all_selector);
Toast.makeText(PlayerActivity.this, R.string.repeat_all,
Toast.LENGTH_SHORT).show();
intent.putExtra(“repeatState”, isAllRepeat);
sendBroadcast(intent);
break;
case isNoneRepeat: // 无重复
repeatBtn
.setBackgroundResource(R.drawable.repeat_none_selector);
Toast.makeText(PlayerActivity.this, R.string.repeat_none,
Toast.LENGTH_SHORT).show();
intent.putExtra(“repeatState”, isNoneRepeat);
break;
}
break;
case R.id.shuffle_music: //随机播放状态
Intent shuffleIntent = new Intent(SHUFFLE_ACTION);
if (isNoneShuffle) { //如果当前状态为非随机播放,点击按钮之后改变状态为随机播放
shuffleBtn
.setBackgroundResource(R.drawable.shuffle_selector);
Toast.makeText(PlayerActivity.this, R.string.shuffle,
Toast.LENGTH_SHORT).show();
isNoneShuffle = false;
isShuffle = true;
shuffleMusic();
repeatBtn.setClickable(false);
shuffleIntent.putExtra(“shuffleState”, true);
sendBroadcast(shuffleIntent);
} else if (isShuffle) {
shuffleBtn
.setBackgroundResource(R.drawable.shuffle_none_selector);
Toast.makeText(PlayerActivity.this, R.string.shuffle_none,
Toast.LENGTH_SHORT).show();
isShuffle = false;
isNoneShuffle = true;
repeatBtn.setClickable(true);
shuffleIntent.putExtra(“shuffleState”, false);
sendBroadcast(shuffleIntent);
}
break;
}
}
}
/**
-
实现监听Seekbar的类
-
@author wwj
*/
private class SeekBarChangeListener implements OnSeekBarChangeListener {
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if(fromUser) {
audioTrackChange(progress); //用户控制进度的改变
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
文末
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家
这里笔者分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
【视频教程】
天道酬勤,只要你想,大厂offer并不是遥不可及!希望本篇文章能为你带来帮助,如果有问题,请在评论区留言。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家
这里笔者分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
[外链图片转存中…(img-BGSV8ev3-1714407381470)]
[外链图片转存中…(img-mDAuxzN4-1714407381471)]
【视频教程】
[外链图片转存中…(img-hNyPqvGn-1714407381471)]
天道酬勤,只要你想,大厂offer并不是遥不可及!希望本篇文章能为你带来帮助,如果有问题,请在评论区留言。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!