package and.yjg.music_app.Music;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import and.yjg.music_app.R;
import static java.lang.Integer.parseInt;
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public class MusicActivity extends AppCompatActivity implements View.OnClickListener{
//定义歌曲名称的数组
public String[] musicName={"光年之外","红色高跟鞋"};
private static SeekBar sb;//定义进度条
private static TextView tv_progress, tv_total, name_song;//定义开始和总时长,歌曲名控件
// private ObjectAnimator animator;//定义旋转的动画
private MusicService.MusicControl musicControl;//音乐控制类
private Button play; //播放按钮
private Button pause; //暂停按钮
private Button con; //继续播放按钮
private Button pre; //上一首按钮
private Button next; //下一首按钮
private ImageView exit; //退出按钮
private TextView song_name; //歌手图片框
Intent intent1, intent2; //定义两个意图
MyServiceConn conn; //服务连接
private boolean isUnbind = false;//记录服务是否被解绑
public int change = 0; //记录下标的变化值
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music);
//去除标题栏
ActionBar actionBar = getSupportActionBar();
if(actionBar!= null){
actionBar.hide();
}
//获得意图
intent1 = getIntent();
//初始化
initView();
}
//初始化
private void initView(){
//依次绑定控件
tv_progress = findViewById(R.id.tv_progress);
tv_total = findViewById(R.id.tv_total);
sb = findViewById(R.id.sb);
name_song = findViewById(R.id.name);
song_name = findViewById(R.id.song_name);
play = findViewById(R.id.btn_play);
pause = findViewById(R.id.btn_pause);
con = findViewById(R.id.btn_continue_play);
pre = findViewById(R.id.btn_pre);
next = findViewById(R.id.btn_next);
//依次设置监听器
play.setOnClickListener(this);
pause.setOnClickListener(this);
con.setOnClickListener(this);
pre.setOnClickListener(this);
next.setOnClickListener(this);
// exit.setOnClickListener(this);
//创建意图对象
intent2 = new Intent(this, MusicService.class);
conn = new MyServiceConn();//创建服务连接对象
bindService(intent2, conn,BIND_AUTO_CREATE);//绑定服务
//从歌曲列表传过来的歌曲名
String name = intent1.getStringExtra("name");
//设置歌曲名显示
name_song.setText(name);
//定义歌曲列表传过来的下标position
String position = intent1.getStringExtra("position");
//将字符串转化为整型i
int i = parseInt(position);
//歌名置为frag1里面的图标数组,下标为i
song_name.setTextSize(SongPage.icons[i]);
//为滑动条添加事件监听
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress == sb.getMax()){
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int progress = seekBar.getProgress();
musicControl.seekTo(progress);
}
});
}
//歌曲进度条的消息机制
@SuppressLint("HandlerLeak")
public static Handler handler = new Handler(){//创建消息处理器对象
//在主线程中处理从子线程发送过来的消息
@SuppressLint({"HandlerLeak", "SetTextI18n"})
@Override
public void handleMessage(Message msg){
Bundle bundle = msg.getData();//获取从子线程发送过来的音乐播放进度
int duration = bundle.getInt("duration");
int currentPosition = bundle.getInt("currentPosition");
sb.setMax(duration);
sb.setProgress(currentPosition);
//歌曲总时长,单位为毫秒
int minute = duration/1000/60;
int second = duration/1000%60;
String strMinute = null;
String strSecond = null;
if(minute < 10){//如果歌曲的时间中的分钟小于10
strMinute = "0" + minute;//在分钟的前面加一个0
}else{
strMinute = minute + "";
}
if (second < 10){//如果歌曲中的秒钟小于10
strSecond = "0" + second;//在秒钟前面加一个0
}else{
strSecond = second + "";
}
tv_total.setText(strMinute + ":" + strSecond);
//歌曲当前播放时长
minute = currentPosition/1000/60;
second = currentPosition/1000%60;
if(minute < 10){//如果歌曲的时间中的分钟小于10
strMinute = "0" + minute;//在分钟的前面加一个0
}else{
strMinute=minute + " ";
}
if (second < 10){//如果歌曲中的秒钟小于10
strSecond = "0" + second;//在秒钟前面加一个0
}else{
strSecond = second + " ";
}
tv_progress.setText(strMinute + ":" + strSecond);
}
};
//用于实现连接服务
class MyServiceConn implements ServiceConnection{
@Override
public void onServiceConnected(ComponentName name, IBinder service){
musicControl=(MusicService.MusicControl) service;
}
@Override
public void onServiceDisconnected(ComponentName name){
}
}
//未解绑则解绑
private void unbind(boolean isUnbind){
if(!isUnbind){//判断服务是否被解绑
musicControl.pausePlay();//暂停播放音乐
unbindService(conn);//解绑服务
}
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onClick(View v) {
//获取歌曲名的下标字符串
String index = intent1.getStringExtra("position");
//将字符串转为整数
int i = parseInt(index);
switch (v.getId()){
case R.id.btn_play://播放按钮点击事件
play.setVisibility(View.INVISIBLE);
musicControl.play(i);
break;
//这里musicName.length-1表示的最后一首歌的下标,即歌曲总数-1
case R.id.btn_pre://播放上一首
if((i + change) < 1) {
change = musicName.length - 1 - i;
song_name.setTextSize(SongPage.icons[i + change]);
name_song.setText(musicName[i + change]);
musicControl.play(i + change);
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Music_app.zip (87个子文件)
Music_app
gradle.properties 1KB
gradle
wrapper
gradle-wrapper.jar 53KB
gradle-wrapper.properties 238B
app
src
androidTest
java
and
yjg
music_app
ExampleInstrumentedTest.java 777B
test
java
and
yjg
music_app
ExampleUnitTest.java 394B
main
java
and
yjg
music_app
Login
LoginActivity.java 3KB
UserDao.java 4KB
RegisterActivity.java 3KB
User.java 1KB
InfoActivity.java 2KB
WelcomeActivity.java 1KB
DataBaseHelper.java 988B
Music
MusicActivity.java 10KB
SongPage.java 3KB
MusicService.java 4KB
MainActivity.java 2KB
res
mipmap-xxhdpi
ic_launcher_round.png 12KB
ic_launcher.png 8KB
mipmap-hdpi
video.jpg 2KB
btn_back.png 2KB
ic_launcher_round.png 5KB
tubiao.jpg 5KB
search_background.png 359B
success_background.png 272B
action.jpg 76KB
img.png 13KB
work_background.png 672B
ic_launcher.png 4KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 276B
ic_launcher_round.xml 276B
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 3KB
mipmap-xxxhdpi
ic_launcher_round.png 16KB
ic_launcher.png 10KB
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 5KB
values
colors.xml 819B
strings.xml 75B
styles.xml 394B
layout
activity_music.xml 4KB
activity_welcome.xml 971B
activity_login.xml 4KB
music_list.xml 435B
activity_main.xml 2KB
activity_info.xml 558B
activity_register.xml 7KB
item_music.xml 1KB
drawable
song.png 8KB
pre.png 139KB
ic_launcher_background.xml 6KB
b.jpg 2KB
video.jpg 2KB
menu_text.xml 240B
close_login_user.png 3KB
edit_style.xml 324B
deletebtn.png 1KB
music_bg.jpg 43KB
a.jpg 2KB
default_icon.png 25KB
button_style.xml 648B
next.png 139KB
song_enter.png 3KB
back_btn.png 1KB
bg.jpg 269KB
open_login_user.png 3KB
exit.png 141KB
singer.png 9KB
play.png 102KB
btn_exit.png 5KB
info.jpg 3KB
pause.png 231KB
item_gridbg.xml 301B
ic_launcher.png 7KB
text_style.xml 322B
raw
music1.mp3 7.94MB
music0.mp3 9.05MB
AndroidManifest.xml 1KB
proguard-rules.pro 772B
libs
build.gradle 934B
.gitignore 8B
gradlew.bat 2KB
build.gradle 595B
settings.gradle 46B
gradlew 5KB
.gitignore 222B
Music_app.iml 990B
共 87 条
- 1
资源评论
拾玖122
- 粉丝: 788
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功