从googles在线文档查看器下载pdf

时间:2011-07-06 23:05:53

标签: android pdf button download

我是Android的新手,长期以来一直坚持这个问题......

我有一个加载网络视图的活动。在此Web视图中,它通过googles在线文档查看器显示pdf。这一切都很完美。

在Web View下面,我有一个下载按钮(要将pdf下载到SD卡)。 但问题是,它不是下载。似乎没有发生任何事情。 进度对话框出现几秒钟,保持0%然后消失。

非常感谢有关如何获取文件下载的任何帮助。 感谢

PS该文件的链接不是.zip / .rar它只是一个以.pdf结尾的典型网址

public class ExamViewActivity extends Activity {

    private static final int DIALOG_DOWNLOAD_PROGRESS = 0;
    private Button downloadButton;
    private ProgressDialog mProgressDialog;
    private String pdf;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.exam_paper_view);

        //retrieve data(pdf link) from previous activity
        Bundle b = getIntent().getExtras();
        pdf = b.getString("pdf");

        //webview
        WebView webview = (WebView) findViewById(R.id.google_webview);
        webview.getSettings().setJavaScriptEnabled(true); 
        webview.loadUrl("http://docs.google.com/gview?embedded=true&url=" + pdf);



        //download button
        downloadButton = (Button)findViewById(R.id.download_button);

        downloadButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startDownload();
            }
        });
    }

    //start download process
    private void startDownload() {
        String url = pdf;
        Log.d("MyLog","url = " + pdf);
        new DownloadFileAsync().execute(url);
    }

    //create progress bar dialog
    @Override
    //On Create Dialog
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case DIALOG_DOWNLOAD_PROGRESS:
                mProgressDialog = new ProgressDialog(this);
                mProgressDialog.setMessage("Downloading file..");
                mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                mProgressDialog.setCancelable(false);
                mProgressDialog.show();
                return mProgressDialog;
            default:
                return null;
        }
    }
    class DownloadFileAsync extends AsyncTask<String, String, String> {

        @Override
        //On Pre Execute
        protected void onPreExecute() {
            super.onPreExecute();
            showDialog(DIALOG_DOWNLOAD_PROGRESS);
        }

        @Override
        //Do In Background
        protected String doInBackground(String... aurl) {
            int count;

            try {
                URL url = new URL(aurl[0]);
                URLConnection conexion = url.openConnection();
                conexion.connect();

                int lenghtOfFile = conexion.getContentLength();
                Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);

                InputStream input = new BufferedInputStream(url.openStream());
                OutputStream output = new FileOutputStream("/sdcard/"+pdf);

                byte data[] = new byte[1024];

                long total = 0;

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

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

        }
        //On progress update
        protected void onProgressUpdate(String... progress) {
             Log.d("ANDRO_ASYNC",progress[0]);
             mProgressDialog.setProgress(Integer.parseInt(progress[0]));
        }

        @Override
        //On post execute
        protected void onPostExecute(String unused) {
            dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
        }
}

1 个答案:

答案 0 :(得分:0)

行,

而不是使用AsyncTask下载文件并显示其进度。 我已经通过使用ACTION_VIEW意图下载该文件而妥协(暂时)。

//download button
    downloadButton = (Button)findViewById(R.id.download_button);

    downloadButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent downloadIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(pdf));
            startActivity(downloadIntent);
        }
    });

现在我需要做的就是找到一种方法将文件存储在不同的文件夹中。但就目前而言,这将是必须的。 刚说过我会提供这种替代方案,其他人也有同样的问题。