How to open downloaded file in android with default availabe application in android
10,800
File file = new File(filePath);
MimeTypeMap map = MimeTypeMap.getSingleton();
String ext = MimeTypeMap.getFileExtensionFromUrl(file.getName());
String type = map.getMimeTypeFromExtension(ext);
if (type == null)
type = "*/*";
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri data = Uri.fromFile(file);
intent.setDataAndType(data, type);
startActivity(intent);
Author by
Neerav Shah
Updated on June 18, 2022Comments
-
Neerav Shah almost 2 years
I am downloading a file from server on completion of download I have to open a file. Know the problem is the file could be of any type so I can't specify and Intent call to open a file with static name like we do to open a PDF file. What I want is when a file is downloaded it will search if any app is available to open the file else it will show pop up. I am doing all this inside fragment. Here my code for downloading :
public class DownloadFile extends AsyncTask<String, Void, Integer> { String file_name = ""; File sdcard = Environment.getExternalStorageDirectory(); @Override protected Integer doInBackground(String... params) { // TODO Auto-generated method stub try { HttpURLConnection url_conn = null; byte[] bffr; long totalSize = 0; File directory = new File( Environment.getExternalStorageDirectory() + "/xyz/download"); directory.mkdirs(); // 06-03 17:57:41.160: D/file name(6882): file_name = ""; file_name = params[0]; Log.d("file name", file_name.toString()); url_conn = (HttpURLConnection) (new URL("http://example.com/uploads/" + file_name)).openConnection(); url_conn.setRequestMethod("GET"); url_conn.setDoOutput(true); url_conn.connect(); if (url_conn.getContentLength() > 0) { File imgFile = new File(sdcard + "/xyz/download/",file_name); FileOutputStream fos = new FileOutputStream(imgFile); InputStream is = url_conn.getInputStream(); totalSize = url_conn.getContentLength(); // Log.d("File Download Size ",totalSize+""); long total = 0; bffr = new byte[1024]; int bufferLength = 0; while ((bufferLength = is.read(bffr)) > 0) { total += bufferLength; publishProgress("" + (int) ((total * 100) / totalSize)); fos.write(bffr, 0, bufferLength); } fos.close(); } else Log.w(file_name.toString(), "FILE NOT FOUND"); return 0; } catch (Exception e) { e.printStackTrace(); return -1; } } private void publishProgress(String... process) { // TODO Auto-generated method stub mprogressDialog.setProgress(Integer.parseInt(process[0])); } protected void onPostExecute(Integer unused) { Log.d("after downloading file ", "file downloaded "); switch (unused) { case 0: mprogressDialog.dismiss(); Intent install = new Intent(Intent.ACTION_VIEW); install.setDataAndType(Uri.fromFile(new File(sdcard + "/xyz/download/",file_name)), "MIME-TYPE"); install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); app.getBaseContext().startActivity(install); break; } } }
In post execute I have tried to open it using Intent but that didn't worked. Any Idea is appreciated