简体   繁体   中英

Open File PDF automatically After Download Completed

I have a problem. I have code for download and open file PDF. I want after download completed, PDF will open automatically.

This is my code for download pdf file :

  private EditText ids;
  private TextView no;
  private TextView per;
  private EditText surat_fi;
  private EditText disp;
  private Button kepada, baca;

  Context context=this;

  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.suratmasuk);

        ids = (EditText) findViewById(R.id.edid);
        no = (TextView) findViewById(R.id.ednomor);
        per = (TextView) findViewById(R.id.edperihal);
        surat_fi = (EditText) findViewById(R.id.surat);
        disp = (EditText) findViewById(R.id.eddisposisi);

  ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
  JSONObject json = JSONSuratMasuk.getJSONfromURL("http://link...");

        try{
        JSONArray  data = json.getJSONArray("data");

        for(int i=0;i<data.length();i++){
        HashMap<String, String> map = new HashMap<String, String>();
        JSONObject jsonobj = data.getJSONObject(i);

               map.put("id1",  jsonobj.getString("id"));
               map.put("nomor",  jsonobj.getString("nosurat"));
               map.put("perihal", jsonobj.getString("perihal"));
               map.put("surat", jsonobj.getString("surat"));
        mylist.add(map);
 }
        }catch(JSONException e)        {
        Log.e("log_tag", "Error parsing data "+e.toString());
 }

              ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.row,
              new String[] { "nomor", "perihal" },
              new int[] { R.id.lvnomor, R.id.lvperihal });

              setListAdapter(adapter);

         final ListView lv = getListView();
         lv.setTextFilterEnabled(true);
         lv.setOnItemClickListener(new OnItemClickListener() {

     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

     @SuppressWarnings("unchecked")
     HashMap<String, String> o = (HashMap<String, String>)         lv.getItemAtPosition(position);

     no.setText(String.valueOf(o.get("nomor")));
     per.setText(String.valueOf(o.get("perihal")));
     surat_fi.setText(String.valueOf(o.get("surat")));


      Boolean result=isDownloadManagerAvailable(getApplicationContext());
      if (result)
      downloadFile();
    }
    });            
      }
    });


@SuppressLint("NewApi")
public void downloadFile() {
    String surfil = surat_fi.getText().toString();      
    String DownloadUrl = "http://link...";
    String fs = DownloadUrl+surfil;
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(fs));
    request.setDescription("Sedang download");
    request.setTitle(surfil);                

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
          request.allowScanningByMediaScanner();
          request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        }
        request.setDestinationInExternalFilesDir(getApplicationContext(),null, surfil);

         DownloadManager manager = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
         manager.enqueue(request);
     }
}   

@SuppressLint("NewApi")
public static boolean isDownloadManagerAvailable(Context context) {
    try {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) {
            return false;
        }
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setClassName("com.android.providers.downloads.ui","com.android.providers.downloads.ui.DownloadList");

        List <ResolveInfo> list = context.getPackageManager().queryIntentActivities(intent,
        PackageManager.MATCH_DEFAULT_ONLY);
        return list.size() > 0;
    } catch (Exception e) {
        return false; 
    }
}     

and this is code to open PDF File :

String sur_fil = surat_fi.getText().toString();     
String baca_file = "/sdcard/Android/data/com.e_office/files/";
String fs_baca = baca_file+sur_fil;
File pdfFile = new File(fs_baca); 
if(pdfFile.exists()) {
    Uri path = Uri.fromFile(pdfFile); 
    Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
    pdfIntent.setDataAndType(path, "application/pdf");
    pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    try {
        startActivity(pdfIntent);
    } catch(ActivityNotFoundException e) {
        Toast.makeText(SuratMasuk.this, "No Application available to view pdf", Toast.LENGTH_LONG).show(); 
    }
}

Where should I put it ?

Well!Well! Whenever its downloading task,better put code in asynch task with progress dialog.As it takes a little time.So you can do as follows.

==> Put/call your downloading code in doinBackground() part of Async() task.

==> call progressdialog() in preexecute() and postexecute() as follows.

==> In post execute() after mProgressDialog.dismiss(); call openfile() function and write your file opener code in fileopen() function.

class MyAsyncTask extends AsyncTask<String, String, Void> {

        boolean running;


        @Override
        protected Void doInBackground(String...fUrl) {
            int count;


            InputStream input = null;
            OutputStream output = null;
            HttpURLConnection connection = null;
            try {

                URL url = new URL(fUrl[0]);
                connection = (HttpURLConnection) url.openConnection();
                connection.connect();

                int lenghtOfFile = connection.getContentLength();


                // download the file
                input = connection.getInputStream();
                output = new FileOutputStream(
                        Environment.getExternalStorageDirectory() + "/MDroid/"
                                + fileName);

    //#################################
        mydownload(fileUrl, filepath, fileName,
            visibility);  //i am calling download function() here


    //##########################################

                byte data[] = new byte[4096];
                long total = 0;
                while ((count = input.read(data)) != -1) {
                    total += count;
                    publishProgress(""+(int)((total*100)/lenghtOfFile));
                    output.write(data, 0, count);
                }

                output.close();
                input.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
    return null;

        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            running = true;

            mProgressDialog.show();
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);

            mProgressDialog.dismiss();
            openfile();
        }

         @Override
        protected void onProgressUpdate(String... progress) {

            // Update the progress dialog
            mProgressDialog.setProgress(Integer.parseInt(progress[0]));

        }

    }

==> openfile() function code is something like this.

public void openfile()
{


    try {
        File file = new File(Environment
                .getExternalStoragePublicDirectory("/MDroid")
                + filepath + fileName);

        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");
        context.startActivity(testIntent);
    } catch (Exception e) {
        e.printStackTrace();
    }

}

Write a Broadcast Receiver with this action: DownloadManager.ACTION_DOWNLOAD_COMPLETE . Once the file gets downloaded, it comes to onReceive() in your receiver.

将您的下载调用放在try catch块中,一旦调用成功,就在结尾之前,调用一个名为openpdf()的新方法,您可以在其中放置此代码。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM