android: downloadmanager 文件存放在哪里

android: downloadmanager where are the files stored

我是 android 中使用 downloadmanager 的新手。我正在使用 genymotion 模拟器。

我正在尝试使用 downloadmanager 下载 mp3 文件。我想知道下载后文件存放在哪里

Environment.getExternalStorageDirectory()

显示/storage/emulated/0。它是共享的 "external storage"

我也查了

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

它指向 /storage/emulated/0/Download 。 mp3 文件不在那里。

我还检查了/storage/emulated/0/Android/data/com.simha.sacredindaapp。 mp3 文件不存在。

我下载mp3文件的代码是:

DownloadManager downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
Uri uri = Uri.parse("http://audio.iskcondesiretree.com/02_-_ISKCON_Swamis/ISKCON_Swamis_-_R_to_Y/His_Holiness_Radhanath_Swami/Lectures/00_-_Year_wise/Devotional_Nectar_-_2016/2016-01-31_Various_-_Vrindavan_is_Perceived_by_Our_Consciousness-For_Ukraine_Devotees_-_Radhanath_Swami.mp3");
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setDescription("My Download").setTitle("Notification titile");
downloadManager.enqueue(request);

您需要设置目标目录。

DownloadManager downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
Uri uri = Uri.parse("http://audio.iskcondesiretree.com/02_-_ISKCON_Swamis/ISKCON_Swamis_-_R_to_Y/His_Holiness_Radhanath_Swami/Lectures/00_-_Year_wise/Devotional_Nectar_-_2016/2016-01-31_Various_-_Vrindavan_is_Perceived_by_Our_Consciousness-For_Ukraine_Devotees_-_Radhanath_Swami.mp3");
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setDescription("My Download").setTitle("Notification titile");

// change the name file and your current activity.
request.setDestinationInExternalPublicDir(MainActivity.this, Environment.DIRECTORY_DOWNLOADS, "test.jpg");

downloadManager.enqueue(request);

如 Lior Shitrit 所述,您需要使用以下方式设置目标目录:requet.setDestinationInExternalPublicDir(...);

要获取下载的文件 uri,您需要使用 DownloadManager.ACTION_DOWNLOAD_COMPLETE 操作注册 BroadcastReceiver。接下来,在 onReceive if action equals DownloadManager.ACTION_DOWNLOAD_COMPLETE 你可以获得唯一的下载 ID 并使用它查询状态和本地 uri:

String action = intent.getAction();
if (action.equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {
    long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
    Cursor cursor = downloadManager.query(new DownloadManager.Query().setFilterById(downloadId));
    if (cursor.moveToFirst()) {
        int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
        String uriString = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
        ...
    }

    cursor.close();
}