增加搜索歌曲并播放的功能,修改了播放界面的一些逻辑

pull/1/head
jsyjst 7 years ago
parent 1a50e6c217
commit 203f146574

@ -0,0 +1,73 @@
package com.example.musicplayer.adapter;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.example.musicplayer.R;
import com.example.musicplayer.entiy.SeachSong;
import java.util.ArrayList;
/**
* Created by on 2018/11/21.
*/
public class SearchContentAdapter extends RecyclerView.Adapter<SearchContentAdapter.ViewHolder> {
private ArrayList<SeachSong.DataBean> mSongListBeans;
private static ItemClick mItemClick;
public static void setItemClick(ItemClick itemClick){
mItemClick = itemClick;
}
public SearchContentAdapter(ArrayList<SeachSong.DataBean> songListBeans){
mSongListBeans = songListBeans;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_song_search_item,parent,false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
SeachSong.DataBean songListBean = mSongListBeans.get(position);
holder.artistTv.setText(songListBean.getSinger());
holder.titleTv.setText(songListBean.getName());
holder.mItemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mItemClick.onClick(position);
}
});
}
@Override
public int getItemCount() {
return mSongListBeans.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
TextView titleTv;
TextView artistTv;
View mItemView;
public ViewHolder(View itemView) {
super(itemView);
titleTv = itemView.findViewById(R.id.tv_title);
artistTv = itemView.findViewById(R.id.tv_artist);
mItemView = itemView;
}
}
public interface ItemClick{
void onClick(int position);
}
}

@ -34,7 +34,6 @@ public class SongAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context mContext;
private int mLastPosition = -1;
private int defaultPosition;
private Song song=new Song();
private OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener){
@ -114,6 +113,7 @@ public class SongAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public void onClick(View v) {
Log.d(TAG, "onClick: "+mp3Info.getAlbumId()+"id="+mp3Info.getId());
//将点击的序列化到本地
Song song=new Song();
song.setArtist(mp3Info.getArtist());
song.setDuration(mp3Info.getDuration());
song.setSize(mp3Info.getSize());

@ -7,5 +7,11 @@ package com.example.musicplayer.constant;
public class BaseUri {
public static String SINGER_URL="http://music.163.com/api/search/get/";
public static String SEARCH_URL="https://api.bzqll.com/music/netease/";
public static String QQ_URL="https://api.bzqll.com/music/tencent/";
public static String STORAGE_IMG_FILE=MyApplication.getContext().getExternalFilesDir("") + "/yuanmusic/img/";
public static final String BASE_API_URL_LASTFM = "http://ws.audioscrobbler.com/2.0/";
}

@ -13,6 +13,7 @@ public interface IPlayContract {
void getSingerAndLrc();//按钮点击事件,获取封面和歌词
void setSingerImg(String ImgUrl); //将图片设置成背景
void setImgFail(String errorMessage);
void setSearchImg();//设置搜索歌曲的图片
}
interface Presenter{
void getSingerImg(String singer);

@ -0,0 +1,26 @@
package com.example.musicplayer.contract;
import com.example.musicplayer.entiy.SeachSong;
import java.util.ArrayList;
/**
* Created by on 2018/11/21.
*/
public interface ISearchContentContract {
interface Model{
void search(String seek); //搜索
}
interface View{
String getSeekContent(); //获得搜索的内容
void setSongsList(ArrayList<SeachSong.DataBean> songListBeans); //显示歌曲列表
void showError();
}
interface Presenter{
void search(String seek); //搜索
void searchSuccess(ArrayList<SeachSong.DataBean> songListBeans); //搜索成功
void searchError(); //搜索失败
}
}

@ -0,0 +1,111 @@
package com.example.musicplayer.entiy;
import java.util.List;
/**
* Created by on 2018/11/21.
*/
public class SeachSong {
/**
* result : SUCCESS
* code : 200
* data : [{"id":"452804665","name":"告白气球","singer":"Mc梦柯","pic":"https://api.bzqll.com/music/netease/pic?id=452804665&key=579621905","lrc":"https://api.bzqll.com/music/netease/lrc?id=452804665&key=579621905","url":"https://api.bzqll.com/music/netease/url?id=452804665&key=579621905"},{"id":"536570450","name":"魔术与歌曲:告白气球","singer":"周杰伦/蔡威泽","pic":"https://api.bzqll.com/music/netease/pic?id=536570450&key=579621905","lrc":"https://api.bzqll.com/music/netease/lrc?id=536570450&key=579621905","url":"https://api.bzqll.com/music/netease/url?id=536570450&key=579621905"},{"id":"864255512","name":"告白气球","singer":"初见","pic":"https://api.bzqll.com/music/netease/pic?id=864255512&key=579621905","lrc":"https://api.bzqll.com/music/netease/lrc?id=864255512&key=579621905","url":"https://api.bzqll.com/music/netease/url?id=864255512&key=579621905"},{"id":"454924401","name":"告白气球","singer":"张穆庭","pic":"https://api.bzqll.com/music/netease/pic?id=454924401&key=579621905","lrc":"https://api.bzqll.com/music/netease/lrc?id=454924401&key=579621905","url":"https://api.bzqll.com/music/netease/url?id=454924401&key=579621905"},{"id":"1301125157","name":"告白气球","singer":"文景熙","pic":"https://api.bzqll.com/music/netease/pic?id=1301125157&key=579621905","lrc":"https://api.bzqll.com/music/netease/lrc?id=1301125157&key=579621905","url":"https://api.bzqll.com/music/netease/url?id=1301125157&key=579621905"},{"id":"1300594463","name":"告白气球","singer":"张阿辉","pic":"https://api.bzqll.com/music/netease/pic?id=1300594463&key=579621905","lrc":"https://api.bzqll.com/music/netease/lrc?id=1300594463&key=579621905","url":"https://api.bzqll.com/music/netease/url?id=1300594463&key=579621905"},{"id":"509726593","name":"告白气球 (卡拉偶客版)","singer":"SNH48","pic":"https://api.bzqll.com/music/netease/pic?id=509726593&key=579621905","lrc":"https://api.bzqll.com/music/netease/lrc?id=509726593&key=579621905","url":"https://api.bzqll.com/music/netease/url?id=509726593&key=579621905"},{"id":"863515406","name":"告白气球","singer":"战小二吖","pic":"https://api.bzqll.com/music/netease/pic?id=863515406&key=579621905","lrc":"https://api.bzqll.com/music/netease/lrc?id=863515406&key=579621905","url":"https://api.bzqll.com/music/netease/url?id=863515406&key=579621905"}]
*/
private String result;
private int code;
private List<DataBean> data;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* id : 452804665
* name :
* singer : Mc
* pic : https://api.bzqll.com/music/netease/pic?id=452804665&key=579621905
* lrc : https://api.bzqll.com/music/netease/lrc?id=452804665&key=579621905
* url : https://api.bzqll.com/music/netease/url?id=452804665&key=579621905
*/
private String id;
private String name;
private String singer;
private String pic;
private String lrc;
private String url;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSinger() {
return singer;
}
public void setSinger(String singer) {
this.singer = singer;
}
public String getPic() {
return pic;
}
public void setPic(String pic) {
this.pic = pic;
}
public String getLrc() {
return lrc;
}
public void setLrc(String lrc) {
this.lrc = lrc;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
}

@ -18,6 +18,7 @@ public class Song implements Serializable {
private int current;//在本地音乐的位置
private long albumId;
private long id;
private String imgUrl;
public long getId() {
return id;
@ -91,7 +92,13 @@ public class Song implements Serializable {
this.albumId = albumId;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
public String toString(){
return "artist="+artist+",title="+title+",url="+url+",duration="+duration+

@ -1,6 +1,7 @@
package com.example.musicplayer.https;
import com.example.musicplayer.constant.BaseUri;
import com.example.musicplayer.https.api.SearchApi;
import com.example.musicplayer.https.api.SingerImgApi;
import java.util.concurrent.TimeUnit;
@ -12,6 +13,8 @@ import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import static com.example.musicplayer.constant.BaseUri.QQ_URL;
import static com.example.musicplayer.constant.BaseUri.SEARCH_URL;
import static com.example.musicplayer.constant.BaseUri.SINGER_URL;
/**
@ -23,6 +26,7 @@ public class NetWork {
private static Converter.Factory gsonConverterFactory = GsonConverterFactory.create();
private static CallAdapter.Factory rxJavaCallAdapterFactory = RxJava2CallAdapterFactory.create();
private static SingerImgApi singerImgApi;
private static SearchApi searchApi;
public static SingerImgApi getSingerImgApi(){
if(singerImgApi==null){
@ -37,5 +41,17 @@ public class NetWork {
return singerImgApi;
}
public static SearchApi getSearchApi(){
if(searchApi ==null){
Retrofit retrofit =new Retrofit.Builder()
.client(builder.build())
.baseUrl(QQ_URL)
.addCallAdapterFactory(rxJavaCallAdapterFactory)
.addConverterFactory(gsonConverterFactory)
.build();
searchApi =retrofit.create(SearchApi.class);
}
return searchApi;
}
}

@ -1,8 +1,26 @@
package com.example.musicplayer.https;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.CallAdapter;
import retrofit2.Converter;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* Created by on 2018/10/26.
*/
public class RetrofitHelp {
private static okhttp3.OkHttpClient.Builder builder = new OkHttpClient.Builder().connectTimeout(20, TimeUnit.SECONDS);
private static Converter.Factory gsonConverterFactory = GsonConverterFactory.create();
private static CallAdapter.Factory rxJavaCallAdapterFactory = RxJava2CallAdapterFactory.create();
public RetrofitHelp(){
}
public static RetrofitHelp getInstance(){
return new RetrofitHelp();
}
}

@ -0,0 +1,20 @@
package com.example.musicplayer.https.api;
import com.example.musicplayer.entiy.SeachSong;
import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;
/**
* Created by on 2018/11/21.
*/
public interface SearchApi {
@GET("search?key=579621905&type=song&limit=30&offset=0")
Observable<SeachSong> search(@Query("s") String seek);
}

@ -0,0 +1,56 @@
package com.example.musicplayer.model;
import android.util.Log;
import com.example.musicplayer.contract.ISearchContentContract;
import com.example.musicplayer.entiy.SeachSong;
import com.example.musicplayer.https.NetWork;
import java.util.ArrayList;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
/**
* Created by on 2018/11/21.
*/
public class SearchContentModel implements ISearchContentContract.Model {
private static final String TAG="SearchContentModel";
private ISearchContentContract.Presenter mPresenter;
public SearchContentModel(ISearchContentContract.Presenter presenter){
mPresenter = presenter;
}
@Override
public void search(String seek) {
NetWork.getSearchApi().search(seek)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<SeachSong>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(SeachSong value) {
mPresenter.searchSuccess((ArrayList<SeachSong.DataBean>) value.getData());
}
@Override
public void onError(Throwable e) {
mPresenter.searchError();
Log.d(TAG, "onError: "+e.toString());
}
@Override
public void onComplete() {
}
});
}
}

@ -0,0 +1,38 @@
package com.example.musicplayer.presenter;
import com.example.musicplayer.base.BasePresenter;
import com.example.musicplayer.contract.ISearchContentContract;
import com.example.musicplayer.entiy.SeachSong;
import com.example.musicplayer.model.SearchContentModel;
import java.util.ArrayList;
/**
* Created by on 2018/11/21.
*/
public class SearchContentPresenter extends BasePresenter<ISearchContentContract.View>
implements ISearchContentContract.Presenter {
private SearchContentModel mModel;
public SearchContentPresenter(){
mModel = new SearchContentModel(this);
}
@Override
public void search(String seek) {
mModel.search(seek);
}
@Override
public void searchSuccess(ArrayList<SeachSong.DataBean> songListBeans) {
if(isAttachView()){
getMvpView().setSongsList(songListBeans);
}
}
@Override
public void searchError() {
getMvpView().showError();
}
}

@ -45,7 +45,7 @@ public class PlayerService extends Service {
mCurrent++;
Log.d(TAG, "-------onBind: 结束");
//将歌曲的信息保存起来
Song song=FileHelper.getSong();
Song song=new Song();
song.setCurrent(mCurrent);
song.setTitle(mMp3InfoList.get(mCurrent).getTitle());
song.setArtist(mMp3InfoList.get(mCurrent).getArtist());
@ -102,6 +102,22 @@ public class PlayerService extends Service {
}
}
public void playOnline(){
try{
mediaPlayer.reset();
mediaPlayer.setDataSource(FileHelper.getSong().getUrl());
mediaPlayer.prepare();
Song song = FileHelper.getSong();
song.setDuration(mediaPlayer.getDuration());
FileHelper.saveSong(song);
isPlaying=true;
mediaPlayer.start();
sendBroadcast(new Intent("SONG_ONLINE"));
}catch (Exception e){
e.printStackTrace();
}
}
/**
*
*/
@ -131,7 +147,7 @@ public class PlayerService extends Service {
}
//将歌曲的信息保存起来
Song song=FileHelper.getSong();
Song song=new Song();
song.setCurrent(mCurrent);
song.setTitle(mMp3InfoList.get(mCurrent).getTitle());
song.setArtist(mMp3InfoList.get(mCurrent).getArtist());
@ -154,7 +170,7 @@ public class PlayerService extends Service {
}
//将歌曲的信息保存起来
Song song=FileHelper.getSong();
Song song=new Song();
song.setCurrent(mCurrent);
song.setTitle(mMp3InfoList.get(mCurrent).getTitle());
song.setArtist(mMp3InfoList.get(mCurrent).getArtist());

@ -25,6 +25,8 @@ import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.example.musicplayer.R;
import com.example.musicplayer.constant.PlayerStatus;
import com.example.musicplayer.entiy.Song;
@ -79,6 +81,7 @@ public class MainActivity extends AppCompatActivity {
intentFilter.addAction("android.song.change");
intentFilter.addAction("SONG_PAUSE");
intentFilter.addAction("SONG_RESUME");
intentFilter.addAction("SONG_ONLINE");
songChangeReceiver = new SongChangeReceiver();
registerReceiver(songChangeReceiver, intentFilter);
initView();
@ -113,7 +116,15 @@ public class MainActivity extends AppCompatActivity {
mSingerTv.setText(mSong.getArtist());
mSeekBar.setMax((int) mSong.getDuration());
mSeekBar.setProgress((int) mSong.getCurrentTime());
FileHelper.setSingerImg(MainActivity.this,mSong.getArtist(),mCoverIv);
if (mSong.getImgUrl() == null) {
FileHelper.setSingerImg(MainActivity.this, mSong.getArtist(), mCoverIv);
} else {
Glide.with(this)
.load(mSong.getImgUrl())
.apply(RequestOptions.errorOf(R.drawable.background))
.into(mCoverIv);
}
} else {
mLinear.setVisibility(View.GONE);
@ -175,7 +186,11 @@ public class MainActivity extends AppCompatActivity {
mSeekBarThread = new Thread(new SeekBarThread());
mSeekBarThread.start();
} else {
mPlayStatusBinder.play(0);
if (FileHelper.getSong().getImgUrl() != null) {
mPlayStatusBinder.playOnline();
} else {
mPlayStatusBinder.play(0);
}
mMediaPlayer.seekTo((int) mSong.getCurrentTime());
mCircleAnimator.start();
mPlayerBtn.setSelected(true);
@ -204,16 +219,19 @@ public class MainActivity extends AppCompatActivity {
//播放情况
if (mPlayStatusBinder.isPlaying()) {
Song song=FileHelper.getSong();
Song song = FileHelper.getSong();
song.setCurrentTime(mPlayStatusBinder.getCurrentTime());
FileHelper.saveSong(song);
toPlayActivityIntent.putExtra(PlayerStatus.PLAYER_STATUS, PlayerStatus.PLAY);
}else{
} else {
//暂停情况
Song song=FileHelper.getSong();
Song song = FileHelper.getSong();
song.setCurrentTime(mSeekBar.getProgress());
FileHelper.saveSong(song);
}
if(FileHelper.getSong().getImgUrl()!=null){
toPlayActivityIntent.putExtra(SearchContentFragment.IS_ONLINE,true);
}
startActivity(toPlayActivityIntent,
ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle());
}
@ -265,23 +283,38 @@ public class MainActivity extends AppCompatActivity {
mSong = FileHelper.getSong();
mSongNameTv.setText(mSong.getTitle());
mSingerTv.setText(mSong.getArtist());
FileHelper.setSingerImg(MainActivity.this,mSong.getArtist(),mCoverIv);
mSeekBar.setMax((int) mSong.getDuration());
if(action.equals("SONG_PAUSE")){
mPlayerBtn.setSelected(false);
mCircleAnimator.pause();
}else if(action.equals("SONG_RESUME")){
mPlayerBtn.setSelected(true);
mCircleAnimator.resume();
mSeekBarThread = new Thread(new SeekBarThread());
mSeekBarThread.start();
}else{
if (!action.equals("SONG_ONLINE")) {
if(mSong.getImgUrl()==null) FileHelper.setSingerImg(MainActivity.this, mSong.getArtist(), mCoverIv);
if (action.equals("SONG_PAUSE")) {
mPlayerBtn.setSelected(false);
mCircleAnimator.pause();
} else if (action.equals("SONG_RESUME")) {
mPlayerBtn.setSelected(true);
mCircleAnimator.resume();
mSeekBarThread = new Thread(new SeekBarThread());
mSeekBarThread.start();
} else {
mPlayerBtn.setSelected(true);
mCircleAnimator.start();
mSeekBarThread = new Thread(new SeekBarThread());
mSeekBarThread.start();
}
} else {
Glide.with(MainActivity.this)
.load(mSong.getImgUrl())
.apply(RequestOptions.errorOf(R.drawable.background))
.into(mCoverIv);
mPlayerBtn.setSelected(true);
mCircleAnimator.start();
mSeekBarThread = new Thread(new SeekBarThread());
mSeekBarThread.start();
}
}
}

@ -64,6 +64,8 @@ import java.util.List;
public class PlayActivity extends BaseActivity implements IPlayContract.View {
private String TAG = "PlayActivity";
private boolean isOnline; //判断是否为网络歌曲
private int mPlayStatus;
private boolean isChange; //拖动进度条
private boolean isSeek;//标记是否在暂停的时候拖动进度条
@ -102,6 +104,18 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mPlayStatusBinder = (PlayerService.PlayStatusBinder) service;
if(isOnline){
mGetImgAndLrcBtn.setVisibility(View.GONE);
if(mPlayStatus==PlayerStatus.PAUSE) mPlayStatusBinder.playOnline();
mDurationTimeTv.setText(MediaUtil.formatTime(FileHelper.getSong().getDuration()));
setSingerImg(FileHelper.getSong().getImgUrl());
mDisc.play();
mPlayBtn.setSelected(true);
startUpdateSeekBarProgress();
}else{
mDurationTimeTv.setText(MediaUtil.formatTime(mSong.getDuration()));
setLocalImg(mSong.getArtist());
}
}
@Override
@ -137,10 +151,15 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
//与Presenter建立关系
mPresenter = new PlayPresenter();
mPresenter.attachView(this);
//是否为网络歌曲
isOnline=getIntent().getBooleanExtra(SearchContentFragment.IS_ONLINE,false);
Log.d(TAG, "isOnline="+isOnline);
mPlayStatus=getIntent().getIntExtra(PlayerStatus.PLAYER_STATUS, 2);
//注册广播
mIntentFilter = new IntentFilter();
mIntentFilter.addAction("android.song.change");
mIntentFilter.addAction("SONG_ONLINE");
songChangeReceiver = new SongChangeReceiver();
registerReceiver(songChangeReceiver, mIntentFilter);
@ -161,28 +180,29 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
mDisc = findViewById(R.id.disc_view);
mDiscImg = findViewById(R.id.iv_disc_background);
//绑定服务
Intent playIntent = new Intent(PlayActivity.this, PlayerService.class);
bindService(playIntent, connection, Context.BIND_AUTO_CREATE);
mSong = FileHelper.getSong();
mMp3InfoList = MediaUtil.getMp3Info();
mSingerTv.setText(mSong.getArtist());
mSongTv.setText(mSong.getTitle());
mCurrentTimeTv.setText(MediaUtil.formatTime(mSong.getCurrentTime()));
mDurationTimeTv.setText(MediaUtil.formatTime(mSong.getDuration()));
mSeekBar.setMax((int) mSong.getDuration());
mSeekBar.setProgress((int) mSong.getCurrentTime());
setLocalImg(mSong.getArtist());
if (getIntent().getIntExtra(PlayerStatus.PLAYER_STATUS, 2) == 1) {
if (mPlayStatus == PlayerStatus.PLAY) {
mDisc.play();
mPlayBtn.setSelected(true);
startUpdateSeekBarProgress();
}
//绑定服务
Intent playIntent = new Intent(PlayActivity.this, PlayerService.class);
bindService(playIntent, connection, Context.BIND_AUTO_CREATE);
}
private void try2UpdateMusicPicBackground(final Bitmap bitmap) {
@ -344,15 +364,17 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
SimpleTarget target = new SimpleTarget<Drawable>(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) {
@Override
public void onResourceReady(@Nullable Drawable resource, Transition<? super Drawable> transition) {
mImgBmp = ((BitmapDrawable) resource).getBitmap();
//保存图片到本地
FileHelper.saveImgToNative(PlayActivity.this, mImgBmp, getSingerName());
//如果是本地音乐
if(!isOnline){
//保存图片到本地
FileHelper.saveImgToNative(PlayActivity.this, mImgBmp, getSingerName());
CommonUtil.showToast(PlayActivity.this, "获取封面歌词成功");
}
Song song = FileHelper.getSong();
mMp3InfoList.get(song.getCurrent()).setImgSave(true);
try2UpdateMusicPicBackground(mImgBmp);
setDiscImg(mImgBmp);
CommonUtil.showToast(PlayActivity.this, "获取封面歌词成功");
mGetImgAndLrcBtn.setVisibility(View.GONE);
}
};
@ -369,6 +391,11 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
CommonUtil.showToast(this, errorMessage);
}
@Override
public void setSearchImg() {
}
//设置唱碟中歌手头像
private void setDiscImg(Bitmap bitmap) {
@ -386,15 +413,17 @@ public class PlayActivity extends BaseActivity implements IPlayContract.View {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Song mSong = FileHelper.getSong();
mSongTv.setText(mSong.getTitle());
mSingerTv.setText(mSong.getArtist());
mDurationTimeTv.setText(MediaUtil.formatTime(mSong.getDuration()));
mPlayBtn.setSelected(true);
setLocalImg(mSong.getArtist());//显示照片
mSeekBar.setMax((int) mSong.getDuration());
startUpdateSeekBarProgress();
if(!action.equals("SONG_ONLINE")){
setLocalImg(mSong.getArtist());//显示照片
}
}
}

@ -0,0 +1,95 @@
package com.example.musicplayer.view;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import com.example.musicplayer.R;
import com.example.musicplayer.adapter.SearchContentAdapter;
import com.example.musicplayer.contract.ISearchContentContract;
import com.example.musicplayer.entiy.SeachSong;
import com.example.musicplayer.entiy.Song;
import com.example.musicplayer.presenter.SearchContentPresenter;
import com.example.musicplayer.util.CommonUtil;
import com.example.musicplayer.util.FileHelper;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
/**
* Created by on 2018/11/21.
*/
public class SearchContentFragment extends Fragment implements ISearchContentContract.View{
private static final String TAG="SearchContentFragment";
public static final String IS_ONLINE="online";
private SearchContentPresenter mPresenter;
private RecyclerView mRecycler;
private LinearLayoutManager manager;
private SearchContentAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_search_content,container,false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
mRecycler = getActivity().findViewById(R.id.recycler_song_list);
manager = new LinearLayoutManager(getActivity());
mPresenter = new SearchContentPresenter();
mPresenter.attachView(this);
mPresenter.search(getSeekContent());
}
@Override
public String getSeekContent() {
Log.d(TAG, "getSeekContent: "+getArguments().getString("seek"));
return getArguments().getString("seek").trim();
}
@Override
public void setSongsList(final ArrayList<SeachSong.DataBean> songListBeans) {
mAdapter = new SearchContentAdapter(songListBeans);
mRecycler.setLayoutManager(manager);
mRecycler.setAdapter(mAdapter);
mAdapter.setItemClick(new SearchContentAdapter.ItemClick() {
@Override
public void onClick(int position) {
SeachSong.DataBean dataBean = songListBeans.get(position);
Song song= new Song();
song.setArtist(dataBean.getSinger());
song.setTitle(dataBean.getName());
song.setUrl(dataBean.getUrl());
song.setImgUrl(dataBean.getPic());
song.setCurrent(FileHelper.getSong()==null?0:FileHelper.getSong().getCurrent());
FileHelper.saveSong(song);
Intent intent=new Intent(getActivity(),PlayActivity.class);
intent.putExtra(IS_ONLINE,true);
startActivity(intent);
}
});
}
@Override
public void showError() {
CommonUtil.showToast(getActivity(),"连接超时");
}
}

@ -2,11 +2,14 @@ package com.example.musicplayer.view;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
import com.example.musicplayer.R;
import com.example.musicplayer.util.CommonUtil;
@ -16,20 +19,44 @@ import com.example.musicplayer.util.CommonUtil;
*/
public class SearchFragment extends Fragment {
private static final String TAG="SearchFragment";
private static final String TAG = "SearchFragment";
private EditText mSeekEdit;
private TextView mSeekTv;
private SearchContentFragment mSearchContentFragment;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_search,container,false);
View view = inflater.inflate(R.layout.fragment_search, container, false);
mSeekEdit = view.findViewById(R.id.edit_seek);
mSeekTv = view.findViewById(R.id.tv_search);
return view;
}
@Override
public void onActivityCreated(Bundle saveInstanceState){
public void onActivityCreated(Bundle saveInstanceState) {
super.onActivityCreated(saveInstanceState);
CommonUtil.showKeyboard(mSeekEdit,getActivity());
Log.d(TAG, "onActivityCreated: true");
CommonUtil.showKeyboard(mSeekEdit, getActivity());
mSeekTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CommonUtil.closeKeybord(mSeekEdit, getActivity());
replaceFragment();
}
});
}
//搜索后的页面
private void replaceFragment() {
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
mSearchContentFragment = new SearchContentFragment();
Bundle bundle = new Bundle();
Log.d(TAG, "seek:" + mSeekEdit.getText().toString());
bundle.putString("seek", mSeekEdit.getText().toString());
mSearchContentFragment.setArguments(bundle);
transaction.replace(R.id.container, mSearchContentFragment);
transaction.commit();
}
}

@ -46,7 +46,8 @@
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:ellipsize="end"
android:maxEms="15"
android:singleLine="true"
android:paddingEnd="20dp"
android:textColor="@color/white_easy" />
</LinearLayout>
</RelativeLayout>

@ -51,5 +51,11 @@
</RelativeLayout>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="20dp"
android:background="@color/seekColor">
</View>
<android.support.v7.widget.RecyclerView
android:background="@color/translucent"
android:id="@+id/recycler_song_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="65dp">
</android.support.v7.widget.RecyclerView>
</LinearLayout>

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_toRightOf="@id/iv_playing"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:ellipsize="end"
android:maxEms="15"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_artist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginStart="10dp"
android:ellipsize="end"
android:maxEms="15"
android:singleLine="true"
android:textColor="@color/short_white" />
</LinearLayout>
<View
android:layout_alignParentBottom="true"
android:layout_marginStart="10dp"
android:layout_width="match_parent"
android:layout_height="1dip"
android:background="@color/gray" />
</RelativeLayout>
Loading…
Cancel
Save