0

I have created a webview and added download listener to it. When I download a file in app, it is storing the file in application package instead of the public downloads folder.

I have a doubt that this is due the fragment I used or the line (request.setDestinationInExternalFilesDir(getActivity().getApplicationContext(), Environment.DIRECTORY_DOWNLOADS,"test.jpg");). Please help.

Thanks in Advance.

Downloaded in folder: /storage/emulated/0/Android/data/packagename/files/Download/test.jpg

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");
    }
}
Phantômaxx
  • 37,901
  • 21
  • 84
  • 115

1 Answers1

0

Try below code:

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);

Here request.setDestinationInExternalPublicDir will download your file in Public Directory and Environment.DIRECTORY_DOWNLOADS is directory name. It will put your file in Downloads folder. If you wish to download your file in specific folder then you can give directory path instead of Environment.DIRECTORY_DOWNLOADS

Viraj Patel
  • 2,113
  • 16
  • 23