首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 下載 MP3 後即時更新 MediaStore 媒體庫,無需重開機

     編輯:程式設計綜合問答

問題現象

自行下載 MP3 檔案後,MediaStore 查詢不到新檔案,必須重開機才會出現在歌曲列表;但系統瀏覽器下載則即時可見。

原因

Android 媒體掃描器(MediaScanner)不會自動偵測應用程式私有目錄或未通過標準下載管道寫入的檔案。系統瀏覽器下載完成後會主動發送廣播通知 MediaScanner 掃描。

解決方案:使用 MediaScannerConnection

// 下載完成後呼叫
MediaScannerConnection.scanFile(
    context,
    new String[]{ fileAbsolutePath },
    new String[]{ "audio/mpeg" }, // MIME 類型
    (path, uri) -> Log.d("MediaScan", "Scanned: " + path + " -> " + uri)
);

完整封裝範例(適用 API 19+)

public class MediaScannerWrapper implements MediaScannerConnection.MediaScannerConnectionClient {
    private MediaScannerConnection connection;
    private String path;
    private String mimeType;

    public MediaScannerWrapper(Context context, String mime) {
        mimeType = mime;
        connection = new MediaScannerConnection(context, this);
    }

    public void scan(String filePath) {
        path = filePath;
        if (connection.isConnected()) {
            connection.scanFile(path, mimeType);
        } else {
            connection.connect();
        }
    }

    @Override
    public void onMediaScannerConnected() {
        connection.scanFile(path, mimeType);
    }

    @Override
    public void onScanCompleted(String path, Uri uri) {
        connection.disconnect();
    }
}

使用方式

new MediaScannerWrapper(context, "audio/mpeg").scan("/sdcard/Download/song.mp3");

呼叫後,媒體庫即刻更新,ListView 通過 notifyDataSetChanged() 即可顯示新歌曲。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved