Demo Ứng dụng phát nhạc MP3


Phát MP3 trực tuyến

Phát cục bộ

  1. Xác định kích thước file
  2. Download file
  3. Đọc nội dung file
  4. Phát nội dung file

Snap 2016-05-02 at 15.52.42

Trong ví dụ này chúng ta sử dụng 02 bản nhạc sau làm demo:

String url1 = "http://data16.chiasenhac.com/downloads/1018/1/1017824-af95fea7/320/Sao%20Em%20No%20Vo%20Tinh%20-%20Quang%20Le%20[MP3%20320kbps].mp3";
String url2 = "http://data22.chiasenhac.com/downloads/1186/1/1185787-baae62aa/320/Trach%20Ai%20Vo%20Tinh%20-%20Giang%20Tien%20[MP3%20320kbps].mp3";

Sử dụng thư viện MediaPlayer phát nhạc MP3 trực tuyến

Uri u = Uri.parse(url);
if (player != null && player.isPlaying())
    player.stop();
player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource(MainActivity.this, u);
player.prepare();
player.start();

Để có thể phát đoạn nhạc trên cần phải đăng ký quyền truy cập Internet cho ứng dụng,

Phần tiếp theo chúng ta sẽ download về file MP3 và đọc thông tin từ file này như: tên, hình đại diện của album,…

  • Download file
URL u = new URL(url);
URLConnection conn = u.openConnection();
InputStream in = conn.getInputStream();
max = conn.getContentLength();
// tao file tam
tempFile = new File(getApplicationContext().getCacheDir(), "temp.mp3");
// chep xuong file tam
OutputStream out = new FileOutputStream(tempFile);
byte[] b = new byte[1024];
int len = 0;
while ((len = in.read(b)) != -1) {
    out.write(b, 0, len);
    publishProgress(len);
}
out.flush();
out.close();

Để có kết kết nối ra ngoài mạng và lấy file về thì Android yêu cầu phải tách luồng chạy riêng,  việc phân luồng trong Android được thực hiện đơn giản với sự hỗ trợ của lớp AsycnTask như sau:

class M extends AsyncTask<Integer, Integer, Integer> {
    @Override
    protected Integer doInBackground(Integer... params) {
       // nội dung sẽ phân luông riêng 

       // thông báo dữ liệu về chương trình chính 
       publishProgress(...);
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
        // xử lý dữ liệu trả về từ luồng riêng 
    }

    @Override
    protected void onPostExecute(Integer integer) {
        super.onPostExecute(integer);
       // xử lý kết thúc luồng 
    }
}

Đọc thông tin File mp3

MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(Uri.parse(tempFile.getAbsolutePath()).toString());
//hình đại diện 
byte[] byteImage = mmr.getEmbeddedPicture();
img = BitmapFactory.decodeByteArray(byteImage, 0, byteImage.length);
// tên bài hat và tên album
ten = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
album = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);

Việc phát nội dung file mp3 cũng tương tự như việc phát trực tuyến.

Để thực hiện từng bước chúng ta theo dõi video trên lớp nhe.

Advertisements

Phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s