title: How to open downloaded file in android with default availabe application in android
body: <p>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 :</p>
  
  <pre><code>public class DownloadFile extends AsyncTask&lt;String, Void, Integer&gt; {
      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() &gt; 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)) &gt; 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;
          }
      }
  }
  </code></pre>
  
  <p>In post execute I have tried to open it using Intent but that didn't worked.
  Any Idea is appreciated </p>