Android - get source file name for async download

I want to get the original file name from the site when downloading a PDF file, and not rename it, but save it as the same name in the SD / Android / Data / (MyAPP) / Files directory. At the moment, I have to tell android what the file name should be when searching and that it should be saved, as when downloading. Is there an easy way to change this to keep it as the original name? Thanks

private void startDownload() {

    String isFileThere = Environment.getExternalStorageDirectory()
            + "/Android/Data/" + getApplicationContext().getPackageName()
            + "/files/xxxxxxxx.pdf";
    File f = new File(isFileThere);

    if (f.exists()) {
        mProgressDialog.setProgress(0);
        showPdf();
    } else {

        DownloadFile downloadFile = new DownloadFile();
        downloadFile
                .execute(url);

    }
}

class DownloadFile extends AsyncTask<String, Integer, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressDialog.show();
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {
        super.onProgressUpdate(progress);
        mProgressDialog.setProgress(progress[0]);
    }

    @Override
    protected String doInBackground(String... aurl) {

        try {

            URL url = new URL(aurl[0]);
            URLConnection connection = url.openConnection();

            connection.connect();
            int fileLength = connection.getContentLength();
            int tickSize = 2 * fileLength / 100;
            int nextProgress = tickSize;

            Log.d(

            "ANDRO_ASYNC", "Lenght of file: " + fileLength);

            InputStream input = new BufferedInputStream(url.openStream());

            String path = Environment.getExternalStorageDirectory()
                    + "/Android/Data/"
                    + getApplicationContext().getPackageName() + "/files";
            File file = new File(path);
            file.mkdirs();
            File outputFile = new File(file, "xxxxxxxx.pdf");

            OutputStream output = new FileOutputStream(outputFile);

            byte data[] = new byte[1024 * 1024];
            long total = 0;
            int count;
            while ((count = input.read(data)) != -1) {
                total += count;
                if (total >= nextProgress) {
                    nextProgress = (int) ((total / tickSize + 1) * tickSize);
                    this.publishProgress((int) (total * 100 / fileLength));
                }
                output.write(data, 0, count);
            }

            output.flush();
            output.close();
            input.close();
            mProgressDialog.setProgress(0);
            mProgressDialog.dismiss();

        } catch (Exception e) {
        }
        return null;
    }

    {

    }

    @Override
    protected void onPostExecute(String unused) {

        File file = new File(Environment.getExternalStorageDirectory()
                + "/Android/Data/"
                + getApplicationContext().getPackageName()
                + "/files/" + "xxxxxxxx.pdf");
        Intent testIntent = new Intent(Intent.ACTION_VIEW);
        testIntent.setType("application/pdf");
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        Uri uri = Uri.fromFile(file);
        intent.setDataAndType(uri, "application/pdf");
        try {
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
            Toast.makeText(atcChoice.this,
                    "No PDF viewer is available, please download one from Play store",
                    Toast.LENGTH_LONG).show();

        }
    }

}
+3
source share
1 answer

Try using URLUtil.guessFileName()

Here is a simple use case:

String url = http://...;
String fileExtenstion = MimeTypeMap.getFileExtensionFromUrl(url);
String name = URLUtil.guessFileName(url, null, fileExtenstion);
+8
source

All Articles