当前位置: 首页 > 知识库问答 >
问题:

下载管理器正在下载应用程序包中的文件

上官鸿晖
2023-03-14

我已经创建了一个webview,并向其中添加了下载监听器。当我在应用程序中下载文件时,它将文件存储在应用程序包中,而不是公共下载文件夹中。

import android.app.DownloadManager;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.CookieManager;
import android.webkit.DownloadListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import static android.content.Context.DOWNLOAD_SERVICE;

public class home extends Fragment {
    private WebView webView;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.home, container, false);

        webView = (WebView) view.findViewById(R.id.testview);
        webView.getSettings().setJavaScriptEnabled(true);

        webView.getSettings().setDisplayZoomControls(false);

        webView.clearCache(true);

        // Change to your own forum url
        webView.loadUrl("https://example.com");

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedError(WebView view, int errorCode,
                                        String description, String failingUrl) {
                view.loadUrl("about:blank");
                Toast.makeText(getActivity(), "Error occurred, please check network connectivity", Toast.LENGTH_SHORT).show();
                super.onReceivedError(view, errorCode, description, failingUrl);
            }

            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // Loads only your forum domain and no others!
                if(url.contains("example") == true) {
                    view.loadUrl(url);
                    // If they are not your domain, use browser instead
                } else {
                    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(i);
                }
                return true;
            }
        });

        webView.setDownloadListener(new DownloadListener() {

            @Override
            public void onDownloadStart(String url, String userAgent,
                                        String contentDisposition, String mimeType,
                                        long contentLength) {
                DownloadManager.Request request = new DownloadManager.Request(
                        Uri.parse(url));
                request.setMimeType("image/jpeg");
                String cookies = CookieManager.getInstance().getCookie(url);
                request.addRequestHeader("cookie", cookies);
                request.addRequestHeader("User-Agent", userAgent);
                request.setDescription("Downloading file...");
                request.setTitle("test.jpg");
                request.allowScanningByMediaScanner();
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                request.setDestinationInExternalFilesDir(getActivity().getApplicationContext(),
                        Environment.DIRECTORY_DOWNLOADS,"test.jpg");
                DownloadManager dm = (DownloadManager) getActivity().getSystemService(DOWNLOAD_SERVICE);
                dm.enqueue(request);
                Toast.makeText(getActivity().getApplicationContext(), "Downloading File. Usually takes 5 seconds.",
                        Toast.LENGTH_LONG).show();
            }
        });
        //returning our layout file
        //change R.layout.yourlayoutfilename for each of your fragments
        return view;
    }


    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        //you can set the title for your toolbar here for different fragments different titles
        getActivity().setTitle("Home");
    }
}

共有1个答案

终波涛
2023-03-14

尝试下面的代码:

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);

这里request.setdestinationinexternalpublicdir将下载公共目录中的文件,environment.directory_downloads是目录名。它会把你的文件放在下载文件夹。如果希望下载特定文件夹中的文件,则可以给出目录路径,而不是environment.directory_downloads

 类似资料:
  • 我正在尝试下载一个文件到目录,可以根据用户选择的任何目录变化。我将当前目录存储在一个file对象中,现在正在尝试下载该文件。文件下载,但它不下载指定的目录。那么,我可以做什么来获得所选目录中的文件。 传递给文件构造函数的名为url的字符串包含url。只是用它来检索文件名。 更新:我刚找到文件。它在手机里而不是sd卡里。它就在这个文件夹里,存储\仿真\00。不知道为什么?另外,我得到的绝对路径是St

  • **我使用Flutter下载器包在完成下载一些文件后,我的应用程序会自动关闭并断开与Android Studio的连接。任何人都可以帮我找到溶剂。 以下是我的控制台错误:

  • 如何将progress_dialog包更改为sn_progress-dialog包?我正在尝试制作一个带有进度对话框的文件下载应用程序,但progress_dialog包不是空安全的。 这是我的屏幕截图应用程序,带有progress_dialog包。

  • 控制从远程源的文件下载。 进程: 主进程​ DownloadItem(下载项)是一个在Electron中展示下载项的EventEmitter​ 它被用于 Session类中的 will-download事件,并允许用户控制下载项。 1 //主进程中 2 const {BrowserWindow} = require('electron') 3 let win = new BrowserWindow

  • 我使用下载管理器api下载大文件,我也实现了。但问题是,下载进度通知显示在状态栏中。但是我想用进度条在活动中显示通知。有人做过吗,如果有请帮帮我。

  • 因此,在下载和打开文件之间的某个位置,我需要一个if语句来检查它是应该继续还是等待文件。