java - 找不到 DownloadManager 下载的文件

标签 java android

我有一个应用程序,可以下载一些音频文件,然后播放它们(使用 MediaPlayer。

我使用 DownloadManager 下载文件,如下所示:

DownloadManager downloadmanager = downloadManager = (DownloadManager) getApplication().getSystemService(Context.DOWNLOAD_SERVICE);

     long id =  downloadManager.enqueue(new DownloadManager.Request(uri)
            .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI |
                                    DownloadManager.Request.NETWORK_MOBILE)
            .setAllowedOverRoaming(false)
            .setTitle(e.getValue().getName())
            .setDescription(getString(R.string.DOWNLOAD_MANAGER_TITLE))
            .setDestinationInExternalFilesDir(getApplication(),Environment.DIRECTORY_DOWNLOADS,fileName));

现在,我可以验证文件是否已下载并且可以播放。 但我需要在 File 中打开它们,然后将该文件传递给 MediaPlayer。

我这样做:

    Uri fileUri = dlMgr.getUriForDownloadedFile(id);

        File mAudioFile =new File(fileUri.getPath());

        if(mAudioFile.exists(){
     mediaPlayer.setDataSource(mAudioFile.getAbsolutePath());
    }else
{
//the file does not exist <-- this is where i end
}

我使用 uid 将下载 ID 存储在 SharedPreferences 中,并使用 downloadmanager 来删除文件 downloadmanager.remove(id) 这工作正常,并且删除了正确的文件。

我做错了什么?

谢谢

最佳答案

无需从 getUriForDownloadedFile 返回的 Uri 获取文件路径,只需使用 Uri 作为 MediaPlayer 的数据源:

if(fileUri!=null){
  mediaPlayer.setDataSource(fileUri);
}else{
   // fileUri is null
}

关于java - 找不到 DownloadManager 下载的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46583457/

相关文章:

java - Java 中的引用到底是什么?

android - 为 ToggleButton 设置图像源

android - 动画列表最初没有动画

android - 如何将 Admob 广告刷新率设置为原生快速广告?

java - 数组 = 列表<数组> .get(int) : Program crashes

java - 了解 spring mvc 中 enctype = multipart/form-data 的工作原理

java - Sonar 在同一个项目中是否支持多种语言?

java - Griffon 与 NetBeans IDE 的集成

java - 如何存储来自 API 调用的 JSON 数据

java - 如何使用字符串或整数以外的数据类型启动 Intent?