Скачать PDF из Google онлайн просмотра документов - PullRequest
1 голос
/ 07 июля 2011

Я новичок в Android и застрял на этой проблеме в течение длительного времени ...

У меня есть действие, которое загружает веб-представление.В этом веб-представлении он отображает PDF-файл через онлайн-просмотрщик документов Google.Все это прекрасно работает.

Под веб-представлением у меня есть кнопка загрузки (для загрузки PDF-файла на SD-карту).Но проблема в том, что это не загрузка.Кажется, ничего не происходит.Диалоговое окно прогресса отображается на несколько секунд, остается на уровне 0%, а затем исчезает.

Любая помощь в получении загрузки файла будет принята с благодарностью.Спасибо

PS ссылка на файл не .zip / .rar, это просто типичный URL, заканчивающийся на .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 голосов
/ 15 июля 2011

OK

Вместо использования 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);
        }
    });

Все, что мне нужно сделать сейчас, - это найти способ хранить файлы в разных папках. Но сейчас это нужно будет сделать. Просто сказал, что предложу эту альтернативу, если у кого-то еще будет такая же проблема.

...