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

标签 java android eclipse pdf android-download-manager

我有一个问题。我有下载和打开文件 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 文件的代码:

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(); 之后的 post execute() 调用 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();
    }

}

关于java - 下载完成后自动打开文件PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23209872/

相关文章:

java - 如何向 Android 图库应用程序添加新目录

java - Android - 隐藏但可选择的 EditText

java - 如何在 Eclipse 中对多个文件应用 XPATH

java - TestNG 启动时发生内部错误

java - 通过android连接到我自己的路由器

java Float.MAX_VALUE 转 Double

java - 针对低性能硬件优化 spring boot

java - 编写此 Java 代码的最简洁/最佳方法是什么?

android - 错误:找不到:vectordrawable-animated-1.1.0

android - 使用 greenDao 时出现 NoClassDefFoundError