Cloud_music/app/src/main/java/com/muqingbfq/MediaPlayer.java
2023-12-03 12:53:03 +08:00

186 lines
6.3 KiB
Java

package com.muqingbfq;
import static com.muqingbfq.bfqkz.xm;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.media3.common.MediaItem;
import androidx.media3.common.PlaybackException;
import androidx.media3.common.Player;
import androidx.media3.exoplayer.ExoPlayer;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.muqingbfq.fragment.Media;
import com.muqingbfq.fragment.bflb_db;
import com.muqingbfq.fragment.bfq_db;
import com.muqingbfq.fragment.search;
import com.muqingbfq.mq.gj;
public class MediaPlayer {
public ExoPlayer build;
// 每秒更新一次进度
public Runnable updateSeekBar = new Runnable() {
@Override
public void run() {
if (build != null && build.isPlaying() && Media.getlrcView() != null) {
long position = build.getCurrentPosition();
Media.setProgress((int) position);
}
main.handler.postDelayed(this, 1000); // 每秒更新一次进度
}
};
@SuppressLint("UnsafeOptInUsageError")
public MediaPlayer() {
build = new ExoPlayer.Builder(home.appCompatActivity).build();
build.addListener(new Player.Listener() {
@Override
public void onPlaybackStateChanged(@Player.State int state) {
switch (state) {
case Player.STATE_READY:
bfui();
break;
case Player.STATE_ENDED:
int i = bfqkz.getmti(bfqkz.ms);
bfqkz.xm = bfqkz.list.get(i);
new Thread() {
@Override
public void run() {
super.run();
bfqkz.mp3(com.muqingbfq.api.
url.hq(bfqkz.xm));
}
}.start();
break;
case Player.STATE_BUFFERING:
case Player.STATE_IDLE:
break;
}
if (Media.view != null) {
main.handler.removeCallbacks(updateSeekBar); // 在播放开始时启动更新进度
long duration = build.getDuration();
Media.setMax((int) build.getDuration());
Media.setTime_a(bfq_an.getTime(duration));
long position = build.getCurrentPosition();
Media.setProgress((int) position);
main.handler.post(updateSeekBar); // 在播放开始时启动更新进度
}
// 在这里将进度更新到UI上
}
@Override
public void onPlayerError(@NonNull PlaybackException error) {
gj.sc(error);
bfqkz.list.remove(bfqkz.xm);
Player.Listener.super.onPlayerError(error);
int i = bfqkz.getmti(bfqkz.ms);
bfqkz.xm = bfqkz.list.get(i);
new Thread() {
@Override
public void run() {
super.run();
bfqkz.mp3(com.muqingbfq.api.
url.hq(bfqkz.xm));
}
}.start();
}
@Override
public void onIsPlayingChanged(boolean isPlaying) {
Media.setbf(isPlaying);
}
});
}
public void pause(){
if (build.isPlaying()) {
build.pause();
}
}
public void start(){
if (bfqkz.xm == null) {
if (bfqkz.list != null && bfqkz.list.size() > 0) {
bfq_an.xyq();
}
return;
}
build.play();
}
@SuppressLint("NotifyDataSetChanged")
public void setDataSource(String path) {
MediaItem mediaItem = MediaItem.fromUri(path);
main.handler.post(() -> {
build.setMediaItem(mediaItem);
build.prepare();
build.setPlayWhenReady(true);
start();
});
}
public boolean isPlaying() {
if (build == null) {
return false;
}
return build.isPlaying();
}
public void seekTo(long a) {
build.seekTo(a);
}
@SuppressLint("NotifyDataSetChanged")
private void bfui() {
Glide.with(main.application)
.asBitmap()
.load(bfqkz.xm.picurl)
.listener(new RequestListener<Bitmap>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model,
@NonNull Target<Bitmap> target, boolean isFirstResource) {
bfq.bitmap = null;
bfqkz.notify.setBitmap();
return false;
}
@Override
public boolean onResourceReady(@NonNull Bitmap bitmap, @NonNull Object model, Target<Bitmap> target,
@NonNull DataSource dataSource, boolean isFirstResource) {
bfq.bitmap = bitmap;
bfqkz.notify.setBitmap();
return false;
}
})
.submit();
String name = xm.name, zz = bfqkz.xm.zz;
if (Media.view != null) {
Media.setProgress(0);
Media.setname(name);
Media.setzz(zz);
bfq_an.islike(Media.view.getContext());
}
bfq_db.setname(name);
bfq_db.setzz(zz);
if (com.muqingbfq.fragment.mp3.lbspq != null) {
com.muqingbfq.fragment.mp3.lbspq.notifyDataSetChanged();
}
if (search.lbspq != null) {
search.lbspq.notifyDataSetChanged();
}
if (bflb_db.adapter != null) {
bflb_db.adapter.notifyDataSetChanged();
gj.sc(1);
}
}
}