Android open downloaded file

12,502

Here's How I did it after a long day of search,Your code helped me a little to solve it:

String name;
DownloadManager mManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.show_interview);
    Button down = (Button) findViewById(R.id.download);
    down.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            down();

        }
    });

}

public void down() {
    mManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    Uri downloadUri = Uri.parse(DOWNLOAD_FILE);
    DownloadManager.Request request = new DownloadManager.Request(
            downloadUri)
            .setAllowedOverRoaming(false)
            .setTitle("Downloading")
            .setDestinationInExternalPublicDir(
                    Environment.DIRECTORY_DOWNLOADS, name + "CV.pdf")
            .setDescription("Download in progress").setMimeType("pdf");
}

@Override
protected void onResume() {
    super.onResume();
    IntentFilter intentFilter = new IntentFilter(
            DownloadManager.ACTION_DOWNLOAD_COMPLETE);
    registerReceiver(broadcast, intentFilter);
}

public void showPdf() {
    try {
        File file = new File(Environment.getExternalStorageDirectory()
                + "/Download/" + name + "CV.pdf");//name here is the name of any string you want to pass to the method
        if (!file.isDirectory())
            file.mkdir();
        Intent testIntent = new Intent("com.adobe.reader");
        testIntent.setType("application/pdf");
        testIntent.setAction(Intent.ACTION_VIEW);
        Uri uri = Uri.fromFile(file);
        testIntent.setDataAndType(uri, "application/pdf");
        startActivity(testIntent);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

BroadcastReceiver broadcast = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        showPdf();
    }
};
Share:
12,502
Msmit1993
Author by

Msmit1993

Updated on June 30, 2022

Comments

  • Msmit1993
    Msmit1993 almost 2 years

    I have a question about downloading a pdf file and opening it with an pdf reader application installed on the phone. I'm new to android and working my way up but got stuck on this part.

    So what i have now: I have an activity that for now starts downloading a pdf file and tries to open is with an intent. For now everything is static so thats why i have a set url.

    private void DownloadFile(){
            DownloadManager downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
            Uri Download_Uri = Uri.parse("http://awebiste.adomain/afile.pdf");
            DownloadManager.Request request = new DownloadManager.Request(Download_Uri);
    
            request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);    
            request.setAllowedOverRoaming(false);   
            request.setTitle("My Data Download");
            request.setDescription("Android Data download using DownloadManager.");
            request.setDestinationInExternalFilesDir(this,Environment.DIRECTORY_DOWNLOADS,"test.pdf");
    
            Long downloadReference = downloadManager.enqueue(request);
    
            if (downloadReference != null){
                Intent target = new Intent(Intent.ACTION_VIEW);
                target.setDataAndType(Uri.parse(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + "/test.pdf"), "application/pdf");
                target.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    
                Log.v("OPEN_FILE_PATH", getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + "/test.pdf");
    
                startActivity(target);
    
            } else {
                //TODO something went wrong error
            }
        }
    

    Now the file is downloaded and saved in the application folder under /storage.sdcard0/Android/data/<application>/files/download and from the documents browser the file can be opent. But when i use the intent at the button of my code i get a toast that the file can not be opent. After some searching on google i think its a permission problem because these files are private to the application. So how do I make these files public?