Android音乐播放器-播放在线歌曲

最近在做一个音乐播放器的小玩意, 在实现了本地音乐的歌曲播放后,希望能够播放网络上的歌曲,于是有了下面的一波乱操作 @@


数据都是易源数据提供的API,网址是这个https://www.showapi.com/,有兴趣的可以去看一看。。

1、歌曲实体类

歌曲的重要组成部分是:歌名、演唱者、专辑图片、歌词、歌曲地址

        

所以创建一个实体类,其中通过songid可以获取歌词,m4a地址可以获取歌曲链接,albumpic_big是图片链接,singername和songname就是演唱者和歌名了,接下来就是要去获取资源了。

2、获取资源


易源数据API中的接口链接是这个,用于通过关键字查询相关歌曲,其中showapi_appid和showapi_sign是需要注册账号的,这些都很简单。然后keyword是搜索关键字的参数,page是第几页。现在我以搜索许嵩为例演示一下:

为了方便我直接用浏览器进行一个获取,Android代码获取数据也给大家贴贴一下:

private String getDataBySingerOrSong(int page,String keyword) throws IOException {  
      Request request = new Request.Builder()  
          .url("http://route.showapi.com/213-1?showapi_appid="+  
                  NetWorkUtils.APPID+"&showapi_sign="+  
                  NetWorkUtils.SECRET+"&keyword="+keyword+"&page="+page+"&")  
          .build();  
      Response response = client.newCall(request).execute();  
      return response.body().string();  
    }  

放入在线json解析中区去看一下效果





返回的是一大串json数据,通过JsonObject对象就可以进行一个解析了。


                String json = (String) msg.obj;  
                try {  
                    JSONObject jsonObject = new JSONObject(json);  
                    JSONArray jsonArray = jsonObject.getJSONObject("showapi_res_body").getJSONObject("pagebean").getJSONArray("contentlist");  
                    netWorkMusics = new ArrayList<NetWorkMusic>();  
                    for(int i = 0; i < jsonArray.length();i++){  
                        JSONObject jo = jsonArray.getJSONObject(i);  
                        String singername = jo.getString("singername"); //显示歌曲,  
                        String songname = jo.getString("songname"); //显示歌名,  
                        String m4a = jo.getString("m4a"); //用来播放歌曲  
                        String albumpic_big = null;  
                        if(jo.isNull("albumpic_big")){  
                            albumpic_big = null;  
                        }else{  
                            albumpic_big = jo.getString("albumpic_big"); //用来设置背景和圆盘  
                        }  
                        String songid = jo.getString("songid"); //用来查找歌词  
                    }  
//                    
                } catch (JSONException e) {  
                    e.printStackTrace();  
                }  
获取到数据后就可以封装到实体对象NetWorkMusic里面了,然后就可以显示到界面里面。
数据获取到了,也显示出来了,这就成功一大半了!!



接下来就是通过albumpic_big来获取图片。。要在子线程中完成的

我就直接贴代码吧:

     public void getBitmap(){  
            //先将背景图片给加载一下  
            new Thread(){  
                public void run() {  
                  try {  
                      if(NetWorkUtils.netWorkMusic.getAlbumpic_big() != null)  
                        {  
                            URL url = new URL(NetWorkUtils.netWorkMusic.getAlbumpic_big());  
                            NetWorkUtils.bitmap = BitmapFactory.decodeStream(url.openStream());  
                        }else{  
                            NetWorkUtils.bitmap = null;  
                        }  
                   } catch (Exception e) {  
                       e.printStackTrace();  
                    }   
              };  
         }.start();  
    }  

还有通过MediaPlayer来播放音乐文件:
//设置监听:播放出错、播放完成、准备完成  
                mediaPlayer.setDataSource(NetWorkUtils.netWorkMusic.getM4a());  
                mediaPlayer.prepareAsync();  
                mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {  
                    @Override  
                    public void onPrepared(MediaPlayer mediaPlayer) {  
                        System.out.println("开始播放网络歌曲");  
                        mediaPlayer.start();  
                    }  
                });  
                mediaPlayer.setOnCompletionListener(new OnCompletionListener() {  
                      
                    @Override  
                    public void onCompletion(MediaPlayer mp) {  
                        next();  
                    }  
                });

还差就是歌词了,这个要通过songid去获取,怎么获取呢?易源数据API提供了一个songid查找歌词的接口,很方便的!!!!



将你上面获取的musicid传入进去就可以了,假设我们以许嵩的《素颜》为例子





是不是歌词都有了,接下来又是通过 JsonObject来获取了,但是有没有发现歌词和我们见到的歌词有点不一样!!!

所以需要一个手动的字符串replace一下啦。


把一些基本的替换一下,歌词就差不多可以 进行一个解析了,解析操作就是基本的字符串操作,我就不列代码了,大家加油一般都是可以 写出来的!!

现在歌名、演唱者、专辑图片、音频文件、歌词都有了,然后你懂得,放到界面里面就可以工作了@@

3、效果图片







源码就不给大家了, 给大家运行一遍跟自己写一遍的效果肯定不一样的,大家一起加油吧!!!


猜你喜欢

转载自blog.csdn.net/qq_32587949/article/details/78646154