音樂下載app實現(Android)

【佳語音樂下載】寫這個app完全出於對個人愛好。支持MV播放。
https://gitlab.com/gaopinqiang/checkversion/raw/master/Music_Download.apk

實現的效果如下:
在這裏插入圖片描述

文件存在【內部存儲/Jiayu_Music】中,也可以去其它的播放器去中來聽。喜歡就支持下!

部分代碼片段:

package com.jiayu.music;

import java.io.File;
import java.lang.ref.WeakReference;
import java.util.ArrayList;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

import com.jiayu.adapter.LyricListAdapter;
import com.jiayu.bean.Cache;
import com.jiayu.bean.LyricListBean;
import com.jiayu.bean.RecordFileBean;
import com.jiayu.constant.CONSTANT;
import com.jiayu.utils.FileUtils;
import com.jiayu.utils.LogUtils;
import com.jiayu.utils.TranslucentStatusBar;
import com.jiayu.welcome.MyApplication;

public class SongDetailActivity extends BaseActivity {
	private static final String TAG = "SongDetailActivity";
	private Handler mainHandler;
	private Context mainContext;
	
	private TextView tv_song_name;
	private TextView tv_singer;
	private ImageView iv_singer_info;
	private TextView tv_song_lyric;
	private ListView lv_song_lyric;
	private SeekBar sb;
	private Button bt_play_pre;
	private Button bt_play_positive;
	private Button bt_play_pause;
	private Button bt_play_next;
	
	private LyricListAdapter lyricListAdapter;
	private ArrayList<LyricListBean> lyricBeanList;
	
	public static final int UPDATE_TITLE = 0;
	public static final int UPDATE_SEEKBAR = 1;
	private MyHandler myHandler = new MyHandler(this);
	public static class MyHandler extends Handler {
		private final WeakReference<SongDetailActivity> mActivity;

		public MyHandler(SongDetailActivity activity) {
			this.mActivity = new WeakReference<SongDetailActivity>(activity);
		}

		@Override
		public void handleMessage(Message msg) {
			SongDetailActivity activity = mActivity.get();
			switch (msg.what) {
			case UPDATE_TITLE:
				LogUtils.d(TAG, "更新歌曲信息");
				int curPosition = Cache.getCurrentPlayingPosition();
				activity.refreshSongInfo(activity.mainActivity.completedRecordBeanList.get(curPosition));
				break;
			case UPDATE_SEEKBAR:
				LogUtils.d(TAG, "更新歌曲信息");
				int progress = (int) msg.obj;
				activity.setSeekbarProgress(progress);
				break;
			default:
				break;
			}
		}
	}
	
	@Override
	public void initView() {
		setContentView(R.layout.activity_song_detail);
		TranslucentStatusBar.setTranslucentStatusBar(this,CONSTANT.STATUS_BAR_COLOR_SONG_DETAIL);
		
		tv_song_name = (TextView) findViewById(R.id.tv_song_name);
		tv_singer = (TextView) findViewById(R.id.tv_singer);
		iv_singer_info = (ImageView) findViewById(R.id.iv_singer_info);
		tv_song_lyric = (TextView) findViewById(R.id.tv_song_lyric);
		lv_song_lyric = (ListView) findViewById(R.id.lv_song_lyric);
		sb = (SeekBar) findViewById(R.id.sb);
		bt_play_pre = (Button) findViewById(R.id.bt_play_pre);
		bt_play_positive = (Button) findViewById(R.id.bt_play_positive);
		bt_play_pause = (Button) findViewById(R.id.bt_play_pause);
		bt_play_next = (Button) findViewById(R.id.bt_play_next);
		
	}

	@Override
	public void initListener() {
		bt_play_pre.setOnClickListener(this);
		bt_play_positive.setOnClickListener(this);
		bt_play_pause.setOnClickListener(this);
		bt_play_next.setOnClickListener(this);
		
		
		sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
			
			@Override
			public void onStopTrackingTouch(SeekBar seekBar) {
				mainActivity.seekTo(sb.getProgress());
				refresPlayButton();
			}
			
			@Override
			public void onStartTrackingTouch(SeekBar arg0) {
				
			}
			
			@Override
			public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
				
			}
		});
		
	}

	private RecordFileBean currentPlayingSong ;
	private MainActivity mainActivity;
	MyApplication myapplication = (MyApplication) getApplication();
	@Override
	public void initData() {
		mainHandler = myapplication.getHandler();
		mainContext = myapplication.getMainContext();
		
		if(null != myHandler){
			myapplication.setSongDetailHandler(myHandler);
		}
		WeakReference<MainActivity> activity = new WeakReference<MainActivity>((MainActivity) mainContext);
		mainActivity = activity.get();
		
		Intent intent = this.getIntent();
		currentPlayingSong = (RecordFileBean) intent.getSerializableExtra("songInfo");
		int sbProgress = intent.getIntExtra("progress", 0);
		setSeekbarProgress(sbProgress);
		
		LayoutInflater mLi = LayoutInflater.from(this);
		lyricBeanList = new ArrayList<>();
		lyricListAdapter = new LyricListAdapter(mLi, lyricBeanList);
		lv_song_lyric.setAdapter(lyricListAdapter);
		
		refresPlayButton();
		
		refreshSongInfo(currentPlayingSong);
	}
	
	private void setSeekbarProgress(int progress){
		int defaultProgress = 2;
		if(progress>defaultProgress){
			sb.setProgress(progress);
		}else{
			sb.setProgress(defaultProgress);
		}
	}
	
	private void refreshSongInfo(RecordFileBean songInfo){
		String songName = songInfo.getFileName();
		String[] split = songName.split("_");
		try {
			tv_song_name.setText(split[1]);
			tv_singer.setText(split[0]);
		} catch (Exception e) {
			LogUtils.e(TAG, "更新標題出錯");
		}
		
		loadSingerInfo(songInfo);
		loadLyric(songInfo);
	}
	
	//根據播放狀態設置播放暫停的按鈕顯示隱藏
	private void refresPlayButton(){
		if(Cache.isPlayStatus()){
			bt_play_positive.setVisibility(View.INVISIBLE);
			bt_play_pause.setVisibility(View.VISIBLE);
		}else{
			bt_play_positive.setVisibility(View.VISIBLE);
			bt_play_pause.setVisibility(View.INVISIBLE);
		}
	}
		

	private void loadSingerInfo(RecordFileBean songInfo) {
		String imagePath = CONSTANT.SONG_IMAGE_DOWNLOAD_FOLDER + songInfo.getFileName() + ".jpg";
		File file = new File(imagePath);
		if (file.exists()) {
			Bitmap bt = BitmapFactory.decodeFile(imagePath);
			iv_singer_info.setImageBitmap(bt);
		}else{
			iv_singer_info.setImageResource(R.drawable.ic_singer_info_default); 
		}
		
	}

	private void loadLyric(RecordFileBean songInfo) {
		
		String filePath = CONSTANT.MUSIC_DOWNLOAD_FOLDER + songInfo.getFileName()+".lrc";
		String lyric = FileUtils.readContentFromFile(filePath);
		
		lyricBeanList.clear();
		String[] split = lyric.split("\n");
		for (String string : split) {
			//LogUtils.d(TAG, string);
			LyricListBean bean = new LyricListBean();
			String s = string.replaceAll("\n", "");
			
			String[] split2 = s.split("]");
			if(split2.length>1){
				bean.setLyric(split2[1]);
				lyricBeanList.add(bean);
			}
		}
		lyricListAdapter.notifyDataSetChanged();
		
	}

	@Override
	public void processClick(View v) {
		switch (v.getId()) {
		case R.id.bt_play_pre:
			mainActivity.controlPreSong();
//			int curP = mainActivity.currentPlayingPosition;
			mainHandler.postDelayed(new Runnable() {
				@Override
				public void run() {
					int curPosition = Cache.getCurrentPlayingPosition();
					refreshSongInfo(mainActivity.completedRecordBeanList.get(curPosition));
					refresPlayButton();
				}
			}, 100);
			break;
		case R.id.bt_play_positive:
			mainActivity.controlPlay();
			refresPlayButton();
			break;
		case R.id.bt_play_pause:
			mainActivity.controlPause();
			refresPlayButton();
			break;
		case R.id.bt_play_next:
			mainActivity.controlNextSong();
			mainHandler.postDelayed(new Runnable() {
				@Override
				public void run() {
					int curPosition = Cache.getCurrentPlayingPosition();
					refreshSongInfo(mainActivity.completedRecordBeanList.get(curPosition));
					refresPlayButton();
				}
			}, 100);
			break;
		default:
			break;
		}
	}
	
	private void sendMessage(int what){
		Message message = new Message();
		message.what = what;
		mainHandler.sendMessage(message);
	}
	
	public void eventBack(View v) {
		finish();
	}

	@Override
	public void onBackPressed() {
		finish();
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		myapplication.setSongDetailHandler(null);
	}
	
	
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章