android 音乐播放器----歌词在线下载

来源:互联网 发布:php public static 编辑:程序博客网 时间:2024/04/30 05:28

本文来自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

 

对应类:

[java] view plaincopy
  1. package com.android.music.play;  
  2. import java.io.BufferedReader;  
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.io.InputStreamReader;  
  6. import java.io.UnsupportedEncodingException;  
  7. import java.net.HttpURLConnection;  
  8. import java.net.MalformedURLException;  
  9. import java.net.URL;  
  10. import java.net.URLEncoder;  
  11. import java.util.ArrayList;  
  12. import android.util.Log;  
  13. public class SearchLRC {  
  14.     private URL url;  
  15.     public static final String DEFAULT_LOCAL = "GB2312";  
  16.     StringBuffer sb = new StringBuffer();  
  17.       
  18.     private boolean findNumber = false;  
  19.     /* 
  20.      * 初期化,根据参数取得lrc的地址 
  21.      */  
  22.     public SearchLRC(String musicName, String singerName) {  
  23.         // 将空格替换成+号  
  24.         //musicName = musicName.replace(' ', '+');  
  25.         //singerName = singerName.replace(' ', '+');  
  26.           
  27.         //传进来的如果是汉字,那么就要进行编码转化  
  28.         try {  
  29.             musicName = URLEncoder.encode(musicName, "utf-8");  
  30.             singerName = URLEncoder.encode(singerName, "utf-8");  
  31.         } catch (UnsupportedEncodingException e2) {  
  32.             // TODO Auto-generated catch block  
  33.             e2.printStackTrace();  
  34.         }         
  35.           
  36. //      String strUrl = "http://box.zhangmen.baidu.com/x?op=12&title="  
  37. //              + musicName + "$$" + singerName + "$$$$";  
  38.           
  39.         String strUrl = "http://box.zhangmen.baidu.com/x?op=12&count=1&title=" +  
  40.         musicName + "$$"+ singerName +"$$$$";  
  41.         Log.d("test", strUrl);  
  42.         try {  
  43.             url = new URL(strUrl);  
  44.             Log.d("SearchLRC===============","url = "+url);  
  45.         } catch (Exception e1) {  
  46.             e1.printStackTrace();  
  47.         }  
  48.         BufferedReader br = null;  
  49.         String s;  
  50.         try {  
  51.             HttpURLConnection   httpConn   =   (HttpURLConnection)url.openConnection();  
  52.             //InputStream   in   =   httpConn.getInputStream();  
  53.             httpConn.connect();  
  54.             InputStreamReader inReader = new InputStreamReader(httpConn.getInputStream());  
  55.           
  56.               
  57.             //InputStreamReader in = new InputStreamReader(url.openStream());  
  58.             Log.d("the encode is ", inReader.getEncoding());  
  59.             br = new BufferedReader(inReader);  
  60.         } catch (IOException e1) {  
  61.             e1.printStackTrace();  
  62.             Log.d("tag""br is null");  
  63.         }  
  64.         try {  
  65.             while ((s = br.readLine()) != null) {  
  66.                 Log.d("SearchLRC","s = "+s);  
  67.                 sb.append(s + "/r/n");                
  68.             }  
  69.         } catch (IOException e) {  
  70.             // TODO Auto-generated catch block  
  71.             e.printStackTrace();  
  72.         }finally{  
  73.             try {  
  74.                 br.close();  
  75.             } catch (IOException e) {                 
  76.                 e.printStackTrace();  
  77.             }  
  78.         }  
  79.     }  
  80.     /* 
  81.      * 根据lrc的地址,读取lrc文件流 
  82.      * 生成歌词的ArryList 
  83.      * 每句歌词是一个String 
  84.      */  
  85.     public ArrayList fetchLyric() {  
  86.         int begin = 0, end = 0, number = 0;// number=0表示暂无歌词  
  87.         String strid = "";  
  88.         begin = sb.indexOf("<lrcid>");  
  89.         Log.d("test""sb = " + sb);  
  90.         if (begin != -1) {  
  91.             end = sb.indexOf("</lrcid>", begin);  
  92.             strid = sb.substring(begin + 7, end);  
  93.             number = Integer.parseInt(strid);  
  94.         }  
  95.         String geciURL = "http://box.zhangmen.baidu.com/bdlrc/" + number / 100  
  96.                 + "/" + number + ".lrc";  
  97.         SetFindLRC(number);  
  98.         Log.d("test""geciURL = " + geciURL);  
  99.         ArrayList gcContent =new ArrayList();  
  100.         String s = new String();  
  101.         try {  
  102.             url = new URL(geciURL);  
  103.         } catch (MalformedURLException e2) {  
  104.             e2.printStackTrace();  
  105.         }  
  106.         BufferedReader br = null;  
  107.         try {  
  108.             br = new BufferedReader(new InputStreamReader(url.openStream(), "GB2312"));  
  109.         } catch (IOException e1) {  
  110.             e1.printStackTrace();  
  111.         }  
  112.         if (br == null) {  
  113.             System.out.print("stream is null");  
  114.         } else {  
  115.             try {  
  116.                 while ((s = br.readLine()) != null) {  
  117.                     gcContent.add(s);  
  118. //                  Log.d("SearchLRC","s = "+s);  
  119.                 }  
  120.                 br.close();  
  121.             } catch (IOException e) {  
  122.                 e.printStackTrace();  
  123.             }  
  124.         }  
  125.         return gcContent;  
  126.     }  
  127.     private void SetFindLRC(int number) {  
  128.         if(number == 0)  
  129.             findNumber = false;  
  130.         else   
  131.             findNumber = true;  
  132.     }  
  133.     public boolean GetFindLRC(){  
  134.         return findNumber;  
  135.     }  
  136. }  

这个是网上找到的,自己做了一定的修改,开始的时候不能用,两点原因:

1.需要添加<uses-permission android:name="android.permission.INTERNET"></uses-permission>

2.传入汉字,编码问题,返回0

原创粉丝点击