如何修复 DownloadManager 无法打开文件和文件丢失?

How to fix DownloadManager can't open file and file missing?

我有使用 downloadManager 的项目,我已经可以在屏幕上显示下载进度,但问题是当我下载文件后单击下载完成通知时提示 "Can't open file" 这是我的代码,

public class MainActivity extends AppCompatActivity {
    Button tombolDownload;
    DownloadManager downloadManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tombolDownload = (Button) findViewById(R.id.btnDownload);
        tombolDownload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                downloadManager = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
                Uri uri = Uri.parse("http://192.168.1.64/FileAPK/app1.apk");
                DownloadManager.Request request = new DownloadManager.Request(uri);
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                Long reference = downloadManager.enqueue(request);
            }
        });
    }
}

我该如何解决这个问题?

我认为你也应该声明 APK 文件的 MIME 类型。

MIME 类型是:application/vnd.android.package-archive .

按如下方式使用:

request.setMimeType("application/vnd.android.package-archive");

编辑:还添加以下行,以便它知道将其存储在何处。在您的代码中,它使用一些没有扩展名的随机数保存文件,因此发生了无法打开文件的问题。

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,"app1.apk");

其中 app1.apk 是带扩展名的文件名,还要添加 setMimeType()

不要忘记权限WRITE_EXTERNAL_STORAGE

希望对您有所帮助

我在下载 zip 文件时遇到了类似的问题。

尝试通过单击下载管理器的通知打开下载的文件时,我会收到相同的 Can't open file 通知。

在我的特殊情况下,我了解到它与代码本身无关——因为文件确实被正确下载了——但事实是所使用的设备没有安装可以处理的应用程序zip 个文件。

在我安装了能够处理 zip 文件的第 3 方应用程序后,我不会再遇到这个问题,因为下载的文件现在可以通过以下方式打开那个应用程序。