本文来自CSDN丹丹博客,转载请必须注明出处:
http://blog.csdn.net/dany1202/archive/2011/06/09/6533513.aspx
使用百度的歌词API,如:
http://box.zhangmen.baidu.com/x?op=12&count=1&title=%E6%97%8B%E6%9C%A8$$%E7%8E%8B%E8%8F%B2 $$$$
黄色部分为歌曲名和歌手名,输入如上网址,会得到一个对应的xml文件
其中的count值为1是说返回的是一个
<lrcid>43150</lrcid>这个值是我们想要的。
http://box.zhangmen.baidu.com/bdlrc/ 这个是百度lrc歌词存放地址
对应歌词地址:http://box.zhangmen.baidu.com/bdlrc/431/43150.lrc
对应类:
- package com.android.music.play;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.UnsupportedEncodingException;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLEncoder;
- import java.util.ArrayList;
- import android.util.Log;
- public class SearchLRC {
- private URL url;
- public static final String DEFAULT_LOCAL = "GB2312";
- StringBuffer sb = new StringBuffer();
- private boolean findNumber = false;
- /*
- * 初期化,根据参数取得lrc的地址
- */
- public SearchLRC(String musicName, String singerName) {
- // 将空格替换成+号
- //musicName = musicName.replace(' ', '+');
- //singerName = singerName.replace(' ', '+');
- //传进来的如果是汉字,那么就要进行编码转化
- try {
- musicName = URLEncoder.encode(musicName, "utf-8");
- singerName = URLEncoder.encode(singerName, "utf-8");
- } catch (UnsupportedEncodingException e2) {
- // TODO Auto-generated catch block
- e2.printStackTrace();
- }
- // String strUrl = "http://box.zhangmen.baidu.com/x?op=12&title="
- // + musicName + "$$" + singerName + "$$$$";
- String strUrl = "http://box.zhangmen.baidu.com/x?op=12&count=1&title=" +
- musicName + "$$"+ singerName +"$$$$";
- Log.d("test", strUrl);
- try {
- url = new URL(strUrl);
- Log.d("SearchLRC===============","url = "+url);
- } catch (Exception e1) {
- e1.printStackTrace();
- }
- BufferedReader br = null;
- String s;
- try {
- HttpURLConnection httpConn = (HttpURLConnection)url.openConnection();
- //InputStream in = httpConn.getInputStream();
- httpConn.connect();
- InputStreamReader inReader = new InputStreamReader(httpConn.getInputStream());
- //InputStreamReader in = new InputStreamReader(url.openStream());
- Log.d("the encode is ", inReader.getEncoding());
- br = new BufferedReader(inReader);
- } catch (IOException e1) {
- e1.printStackTrace();
- Log.d("tag", "br is null");
- }
- try {
- while ((s = br.readLine()) != null) {
- Log.d("SearchLRC","s = "+s);
- sb.append(s + "/r/n");
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- try {
- br.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- /*
- * 根据lrc的地址,读取lrc文件流
- * 生成歌词的ArryList
- * 每句歌词是一个String
- */
- public ArrayList fetchLyric() {
- int begin = 0, end = 0, number = 0;// number=0表示暂无歌词
- String strid = "";
- begin = sb.indexOf("<lrcid>");
- Log.d("test", "sb = " + sb);
- if (begin != -1) {
- end = sb.indexOf("</lrcid>", begin);
- strid = sb.substring(begin + 7, end);
- number = Integer.parseInt(strid);
- }
- String geciURL = "http://box.zhangmen.baidu.com/bdlrc/" + number / 100
- + "/" + number + ".lrc";
- SetFindLRC(number);
- Log.d("test", "geciURL = " + geciURL);
- ArrayList gcContent =new ArrayList();
- String s = new String();
- try {
- url = new URL(geciURL);
- } catch (MalformedURLException e2) {
- e2.printStackTrace();
- }
- BufferedReader br = null;
- try {
- br = new BufferedReader(new InputStreamReader(url.openStream(), "GB2312"));
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- if (br == null) {
- System.out.print("stream is null");
- } else {
- try {
- while ((s = br.readLine()) != null) {
- gcContent.add(s);
- // Log.d("SearchLRC","s = "+s);
- }
- br.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return gcContent;
- }
- private void SetFindLRC(int number) {
- if(number == 0)
- findNumber = false;
- else
- findNumber = true;
- }
- public boolean GetFindLRC(){
- return findNumber;
- }
- }
这个是网上找到的,自己做了一定的修改,开始的时候不能用,两点原因:
1.需要添加<uses-permission android:name="android.permission.INTERNET"></uses-permission>
2.传入汉字,编码问题,返回0