Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發本地及網絡Mp3音樂播放器(十九)通知媒體庫更新剛下載的MP3

Android開發本地及網絡Mp3音樂播放器(十九)通知媒體庫更新剛下載的MP3

編輯:關於Android編程

實現功能:

通知媒體庫更新

糾結了幾天,百度到一個方法,可以在安卓4.4,通知媒體庫更新。

媒體庫更新了,重新打開APP,就可以看到新的歌曲,但這樣還是不完善。

後續將博文,將實現 下載音樂成功後,通更新媒體庫後,更新本地音樂列表。

因為,沒有自己的服務器,所以網絡音樂所有相關功能(包含搜索音樂、下載音樂、下載歌詞)均無法保證時效性,建議,盡快下載和練習;如果你下載時候,已經因為我采集的服務器更改規則,請給我留言,如果可以解決,我將在有空的時候獻上新的源碼。

實現效果如圖:
\

實現代碼如下:
DownloadDialogFragment如下:
package com.iwanghang.drmplayer;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.graphics.Path;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.app.DialogFragment;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.iwanghang.drmplayer.utils.Constant;
import com.iwanghang.drmplayer.utils.DownloadUtils;
import com.iwanghang.drmplayer.utils.MediaScanner;
import com.iwanghang.drmplayer.utils.MediaUtils;
import com.iwanghang.drmplayer.utils.SearchMusicUtils;
import com.iwanghang.drmplayer.vo.SearchResult;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

/**
 * Created by iwanghang on 16/5/3.
 * DownloadDialogFargment
 */
public class DownloadDialogFragment extends DialogFragment {

    private SearchResult searchResult;//當前要下載的歌曲對象
    private MainActivity mainActivity;
    public static DownloadDialogFragment newInstance(SearchResult searchResult){
        DownloadDialogFragment downloadDialogFragment = new DownloadDialogFragment();
        downloadDialogFragment.searchResult = searchResult;
        return downloadDialogFragment;
    }

    private String[] items;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mainActivity = (MainActivity) getActivity();
        //items = new String[]{"下載","取消"};
        items = new String[]{getString(R.string.download),getString(R.string.cancel)};
    }

    //創建對話框的事件方法
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final AlertDialog.Builder builder = new AlertDialog.Builder(mainActivity);
        builder.setCancelable(true);//返回鍵可以取消
        builder.setItems(items,new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                    case 0:
                        //執行下載
                        downloadMusic();
                        break;
                    case 1://取消
                        dialog.dismiss();
                        break;
                }
            }
        });
        return builder.show();
    }

    //下載音樂
    private void downloadMusic() {
        Toast.makeText(mainActivity, "正在下載:" + searchResult.getMusicName(), Toast.LENGTH_LONG).show();
        DownloadUtils.getsInstance().setListener(new DownloadUtils.OnDownloadListener() {
            @Override
            public void onDowload(String mp3Url) { //下載成功
                Toast.makeText(mainActivity, "下載成功", Toast.LENGTH_SHORT).show();


                System.out.println("DownloadDialogFragment.downloadMusic @ = " + Environment.getExternalStorageDirectory()+Constant.DIR_MUSIC + "/" + mp3Url);
                //更新媒體庫
                scanFile(mainActivity,Environment.getExternalStorageDirectory()+Constant.DIR_MUSIC + "/" + mp3Url);
                //更新 本地音樂列表



            }


            @Override
            public void onFailed(String error) { //下載失敗
                Toast.makeText(mainActivity, error, Toast.LENGTH_SHORT).show();

            }
        }).download(searchResult);
    }



    //更新媒體庫
    /**
     * 通知媒體庫更新文件
     * @param context
     * @param filePath 文件全路徑
     *
     * */
    public void scanFile(Context context, String filePath) {
        Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        scanIntent.setData(Uri.fromFile(new File(filePath)));
        context.sendBroadcast(scanIntent);
    }

}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved