我正在开发一款可以使用DownloadManager下载文件的应用。我使用以下方法将下载位置设置为外部存储:
setDestinationInExternalFilesDir(context, "temp_downloads", "filename");
我决定下载到外部存储的原因是因为某些文件很大(> 200 MB)。默认下载位置是共享下载缓存目录,如果我没有弄错并且downloading more than 200 MB will cause the download to fail,则其大小限制为200 MB。
问题是如果使用带有sdcard的设备的用户在使用应用程序时弹出sdcard,则下载将失败,因为setDestinationInExternalFilesDir方法会抛出IllegalStateException,如果未捕获该应用程序将导致应用程序崩溃。
没有sdcard插槽的设备没有问题,因为系统会生成模拟的外部存储,路径如下:/ storage / emulated /这个存储将始终可用。但是如果设备有sdcard插槽,外部存储路径将是/ storage / sdcard0 /,如果我尝试调用:
context.getExternalFilesDir(null);
虽然没有安装SD卡,但它将返回null。
这是否意味着DownloadManager不适用于使用弹出的SD卡下载设备上的大文件?或者有没有解决这个问题?
我不是在寻找使用直接下载到内部存储或不使用DownloadManager的第三方库的解决方案,因为使用DownloadManager是必需的。