1. 程式人生 > >[Android]第三次作業

[Android]第三次作業

Android線上音樂播放器

主要功能介紹

自動獲取雲端歌曲列表

自動載入雲端音樂並播放

播放列表迴圈播放音樂

程式執行截圖

關鍵程式碼解析

獲取雲端音樂列表

這裡使用騰訊雲物件儲存服務作為雲端資料儲存

Android端使用OkHttp3庫進行HTTPS的GET請求

因為前期測試時,ListView初始化時無法正確讀取AllMusic的資料

懷疑是回撥函式的閉包所造成的,所以在這裡使用廣播的形式,將讀取到的雲端音樂列表廣播出去後在處理加入AllMusic佇列

但是在廣播過程中也同時修改了初始化ListView的時間,所以造成無法正常初始話的原因有待商榷,可能是閉包造成的,也有可能是初始化過早造成的

  • HTTPS的GET請求如下
     String url = "https://code-1251175805.cos.ap-chengdu.myqcloud.com/List.txt";
        final OkHttpClient okHttpClient=new OkHttpClient();
        final Request request=new Request.Builder().url(url).build();
        new Thread(new Runnable() {
            @Override
            
public void run() { try { Response response=okHttpClient.newCall(request).execute(); if (response.isSuccessful()){ String body=response.body().string(); Intent intent = new Intent("com.example.leeli.musicplayer"); intent.putExtra(Intent.EXTRA_TEXT,body); MusicListBroad.sendBroadcast(intent); }
else { Log.e("E", "run: "+response.code()+response.message()); } } catch (IOException e) { e.printStackTrace(); } } }).start();
  • 資料處理如下:
IntentFilter filter = new IntentFilter("com.example.leeli.musicplayer");
        MusicListBroad = LocalBroadcastManager.getInstance(this);
        MusicListBroad.registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String ListBody = intent.getStringExtra(Intent.EXTRA_TEXT);
                Log.i("list1",ListBody);
                String Item[] = ListBody.split("\r\n");
                for(int i=0;i<Item.length;i++)
                {
                    String temp[] = Item[i].split("@");
                    MusicInfo t = new MusicInfo();
                    t.Name = temp[0];
                    t.Url = temp[1];
                    t.Position = i;
                    AllMusic.add(t);
                }
  • 初始化ListView及表項的點選事件響應如下:
          MusicList = (ListView) findViewById(R.id.MusicList);
                adapter = new BaseAdapter() {
                    @Override
                    public int getCount() {
                        return AllMusic.size();
                    }

                    @Override
                    public Object getItem(int position) {
                        return null;
                    }

                    @Override
                    public long getItemId(int position) {
                        return 0;
                    }

                    @Override
                    public View getView(int position, View convertView, ViewGroup parent) {
                        TextView MusicItem = new TextView(MainActivity.this);
                        MusicItem.setText(AllMusic.get(position).Name);
                        MusicItem.setTextSize(30);
                        return MusicItem;
                    }
                };
                MusicList.setAdapter(adapter);
                MusicList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        Toast.makeText(MainActivity.this, "開始播放:"+AllMusic.get(position).Name, Toast.LENGTH_LONG).show();
                        PlayMusic(position);
                    }
                });
            }
        },filter);

播放雲端音樂

     try
        {
            mediaPlayer.reset();
            mediaPlayer.setDataSource(AllMusic.get(position).Url);
            mediaPlayer.prepare();
            mediaPlayer.start();
            Start.setText("暫停");
            NowMusic = position;
            isFirst = false;
        } catch (Exception e)
        {
            e.printStackTrace();
        }

雲端的MusicList定義

     G.E.M. 鄧紫棋-光年之外@https://code-1251175805.cos.ap-chengdu.myqcloud.com/1.mp3
     LON-我的一個道姑朋友@https://code-1251175805.cos.ap-chengdu.myqcloud.com/2.mp3
     阿里郎-蘭花指@https://code-1251175805.cos.ap-chengdu.myqcloud.com/3.mp3
     岳雲鵬-如果有個直達天堂的電梯@https://code-1251175805.cos.ap-chengdu.myqcloud.com/4.mp3
     張傑_張碧晨-只要平凡@https://code-1251175805.cos.ap-chengdu.myqcloud.com/5.mp3

專案地址

https://github.com/leeli73/AndroidOnlineMusicPlayerDemo.git

APP下載連結

https://github.com/leeli73/AndroidOnlineMusicPlayerDemo/releases/download/V1.0/OnlineMusicPlayer.apk