-
import android.util.Log;
-
public class OnlineLrcUtil {
-
private static String TAG = “OnlineLrcUtil”;
-
private static OnlineLrcUtil instance;
-
public static final String lrcRootPath = Environment
-
.getExternalStorageDirectory().toString()
-
+ “/SweetMusicPlayer/Lyrics/”;
-
public static final String queryLrcURLRoot = “http://geci.me/api/lyric/”;
-
public static OnlineLrcUtil getInstance() {
-
if (null == instance) {
-
instance = new OnlineLrcUtil();
-
}
-
return instance;
-
}
-
public String getQueryLrcURL(String title, String artist) {
-
return queryLrcURLRoot + Encode(title) + “/” + Encode(artist);
-
}
-
public String getLrcURL(String title, String artist) {
-
String queryLrcURLStr = getQueryLrcURL(title, artist);
-
try {
-
URL url = new URL(queryLrcURLStr);
-
URLConnection urlConnection = url.openConnection();
-
urlConnection.connect();
-
BufferedReader in = new BufferedReader(new InputStreamReader(
-
urlConnection.getInputStream()));
-
StringBuffer sb = new StringBuffer();
-
String temp;
-
while ((temp = in.readLine()) != null) {
-
sb.append(temp);
-
}
-
JSONObject jObject = new JSONObject(sb.toString());
-
int count = jObject.getInt(“count”);
-
int index = count == 0 ? 0 : new Random().nextInt() % count;
-
JSONArray jArray = jObject.getJSONArray(“result”);
-
JSONObject obj = jArray.getJSONObject(index);
-
return obj.getString(“lrc”);
-
} catch (MalformedURLException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
} catch (IOException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
} catch (JSONException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
return null;
-
}
-
// 歌手,歌曲名中的空格进行转码
-
public String Encode(String str) {
-
try {
-
return URLEncoder.encode(str.trim(), “utf-8”);
-
} catch (UnsupportedEncodingException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
return str;
-
}
-
// 歌词文件网络地址,歌词文件本地缓冲地址
-
public boolean wrtieContentFromUrl(String urlPath, String lrcPath) {
-
Log.i(TAG, “lrcURL” + urlPath);
-
try {
-
URL url = new URL(urlPath);
-
URLConnection urlConnection = url.openConnection();
-
urlConnection.connect();
-
HttpURLConnection httpConn = (HttpURLConnection) urlConnection;
-
if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
-
File file = new File(lrcRootPath);
-
if (!file.exists()) {
-
file.mkdirs();
-
}
-
BufferedReader bf = new BufferedReader(new InputStreamReader(
-
urlConnection.getInputStream(), “utf-8”));
-
PrintWriter out = new PrintWriter(new BufferedWriter(
-
new OutputStreamWriter(new FileOutputStream(lrcPath),
-
“utf-8”)));
-
char c[] = new char[256];
-
int temp = -1;
-
while ((temp = bf.read()) != -1) {
-
bf.read©;
-
out.write©;
-
}
-
bf.close();
-
out.close();
-
return true;
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
-
}
-
// System.out.println(“getFile:”+str);
-
} catch (MalformedURLException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
} catch (IOException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
return false;
-
}
-
public String getLrcPath(String title, String artist) {
-
return lrcRootPath + title + " - " + artist + “.lrc”;
-
}
-
}
LrcProcess 类,用来保存处理下载后的文件
public class LrcProcess {
private List lrcList; //List集合存放歌词内容对象
private LrcContent mLrcContent; //声明一个歌词内容对象
/**
- 无参构造函数用来实例化对象
*/
public LrcProcess() {
mLrcContent = new LrcContent();
lrcList = new ArrayList();
}
/**
-
读取歌词
-
@param path
-
@return
*/
public String readLRC(String path) {
//定义一个StringBuilder对象,用来存放歌词内容
StringBuilder stringBuilder = new StringBuilder();
File f = new File(path.replace(".mp3", “.lrc”));
try {
//创建一个文件输入流对象
FileInputStream fis = new FileInputStream(f);
InputStreamReader isr = new InputStreamReader(fis, “utf-8”);
BufferedReader br = new BufferedReader(isr);
String s = “”;
while((s = br.readLine()) != null) {
//替换字符
s = s.replace("[", “”);
s = s.replace("]", “@”);
//分离“@”字符
String splitLrcData[] = s.split("@");
if(splitLrcData.length > 1) {
Log.i(“INFO”, splitLrcData[1]+“歌词”);
mLrcContent.setLrcStr(splitLrcData[1]);
Log.i(“INFO”, splitLrcData[0]+“时间”);
//处理歌词取得歌曲的时间
int lrcTime = time2Str(splitLrcData[0]);
mLrcContent.setLrcTime(lrcTime);
//添加进列表数组
lrcList.add(mLrcContent);
//新创建歌词内容对象
mLrcContent = new LrcContent();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
stringBuilder.append(“木有歌词文件,赶紧去下载!…”);
} catch (IOException e) {
e.printStackTrace();
stringBuilder.append(“木有读取到歌词哦!”);
}
return stringBuilder.toString();
}
/**
-
解析歌词时间
-
歌词内容格式如下:
-
[00:02.32]陈奕迅
-
[00:03.43]好久不见
-
[00:05.22]歌词制作 王涛
-
@param timeStr
-
@return
*/
public int time2Str(String timeStr) {
timeStr = timeStr.replace(":", “.”);
timeStr = timeStr.replace(".", “@”);
String timeData[] = timeStr.split("@"); //将时间分隔成字符串数组
//分离出分、秒并转换为整型
int minute = Integer.parseInt(timeData[0]);
int second = Integer.parseInt(timeData[1]);
int millisecond = Integer.parseInt(timeData[2]);
//计算上一行与下一行的时间转换为毫秒数
int currentTime = (minute * 60 + second) * 1000 + millisecond * 10;
return currentTime;
}
public List getLrcList() {
return lrcList;
}
Mainactivity 大概调用方法
public class MainActivity extends Activity {
//好久不见 青花
private String mMusicName=“夜曲”;
//陈奕迅 周传雄
private String mMusicAutor=“周杰伦”;
@SuppressLint(“SdCardPath”)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);