繁体   English   中英

下载完成后自动打开文件PDF

[英]Open File PDF automatically After Download Completed

我有个问题。 我有下载和打开PDF文件的代码。 我希望下载完成后,PDF将自动打开。

这是我下载pdf文件的代码:

  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; 
    }
}     

这是打开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(); 
    }
}

我应该放在哪里?

好吧! 无论何时执行下载任务,最好通过进度对话框将代码放在异步任务中。这需要一些时间。因此,您可以执行以下操作。

==>Async()任务的doinBackground()部分中放置/调用您的下载代码。

==>如下在preexecute()postexecute()调用progressdialog()

==>mProgressDialog.dismiss();之后的mProgressDialog.dismiss(); 调用openfile()函数,并在fileopen()函数中编写文件打开器代码。

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()函数代码是这样的。

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();
    }

}

使用以下操作编写广播接收器DownloadManager.ACTION_DOWNLOAD_COMPLETE 下载文件后,它将进入接收器中的onReceive()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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