3

この webview コードがあり、ユーザーが PDF リンクをクリックしたときに PDF ファイルを開くことができるようにしたいと考えています。これがコードです。これの PDF 領域内に何を入れなければならないか教えてもらえますか? さまざまな方法を試しましたが、PDF をまったく表示できません。助けてくれてありがとう。

webview.setWebViewClient ( new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // do your handling codes here, which url is the requested url
        // probably you need to open that url rather than redirect:
        if (url.startsWith("tel:")) {
            startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url)));
        } else if (url.startsWith("mailto:")) {
            url = url.replaceFirst("mailto:", "");
            url = url.trim();
            Intent i = new Intent(Intent.ACTION_SEND);
            i.setType("plain/text").putExtra(Intent.EXTRA_EMAIL,
                    new String[]{url});
            startActivity(i);

        } else if (url.startsWith("geo:")) {
            try {
            } catch (Exception e) {
                System.out.println(e);
            }

        } else if (url.endsWith("pdf")) {

            try {

            } catch (Exception e) {
                System.out.println(e);
            }

        } else {
            view.loadUrl(url);
        }
        return true;
        // then it is not handled by default action
    }
});
4

5 に答える 5

11

これは次のように簡単です。

try
{
 Intent intentUrl = new Intent(Intent.ACTION_VIEW);
 intentUrl.setDataAndType(url, "application/pdf");
 intentUrl.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 myActivity.startActivity(intentUrl);
}
catch (ActivityNotFoundException e)
{
 Toast.makeText(myActivity, "No PDF Viewer Installed", Toast.LENGTH_LONG).show();
}

私はこれを試していませんが。

私たちのアプリでは、PDF をアプリ ファイル システムにダウンロードし、誰でも読めるようにしてから、パスを Intent に渡して PDF 表示アプリ (Acrobat Reader など) を開きます。これらのダウンロードした PDF のクリーンアップにも注意する必要があることに注意してください。

あなたのtryブロックに入れます

new DownloadPDFTask().execute(url);

ダウンロードPDFTask クラス:

public class DownloadPDFTask extends AsyncTask<String, Void, Integer> 
{
    protected ProgressDialog mWorkingDialog;    // progress dialog
    protected String mFileName;         // downloaded file
    protected String mError;            // for errors

    @Override
    protected Integer doInBackground(String... urls)
    {

     try
     {
      byte[] dataBuffer = new byte[4096];
          int nRead = 0;

          // set local filename to last part of URL
          String[] strURLParts = urls[0].split("/");
          if (strURLParts.length > 0)
            mFileName = strURLParts[strURLParts.length - 1];
          else
                mFileName = "REPORT.pdf";

          // download URL and store to strFileName

          // connection to url
      java.net.URL urlReport = new java.net.URL(urls[0]);
          URLConnection urlConn = urlReport.openConnection();
          InputStream streamInput = urlConn.getInputStream();
          BufferedInputStream bufferedStreamInput = new BufferedInputStream(streamInput);
          FileOutputStream outputStream = myActivity.openFileOutput(mFileName,Context.MODE_WORLD_READABLE); // must be world readable so external Intent can open!
          while ((nRead = bufferedStreamInput.read(dataBuffer)) > 0)
                outputStream.write(dataBuffer, 0, nRead);
          streamInput.close();
          outputStream.close();
      }
      catch (Exception e)
      {
       Log.e("myApp", e.getMessage());
       mError = e.getMessage();
       return (1);
      }

     return (0);
    }

    //-------------------------------------------------------------------------
    // PreExecute - UI thread setup
    //-------------------------------------------------------------------------

    @Override
    protected void onPreExecute()
    {
     // show "Downloading, Please Wait" dialog
     mWorkingDialog = ProgressDialog.show(myActivity, "", "Downloading PDF Document, Please Wait...", true);
     return;
    }

    //-------------------------------------------------------------------------
    // PostExecute - UI thread finish
    //-------------------------------------------------------------------------

    @Override
    protected void onPostExecute (Integer result)
    {
         if (mWorkingDialog != null)
      {
       mWorkingDialog.dismiss();
       mWorkingDialog = null;
      }

         switch (result)
         {
         case 0:                            // a URL

            // Intent to view download PDF
            Uri uri  = Uri.fromFile(myActivity.getFileStreamPath(mFileName));

            try
            {
                Intent intentUrl = new Intent(Intent.ACTION_VIEW);
                intentUrl.setDataAndType(uri, "application/pdf");
                intentUrl.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                myActivity.startActivity(intentUrl);
            }
            catch (ActivityNotFoundException e)
            {
                Toast.makeText(myActivity, "No PDF Viewer Installed", Toast.LENGTH_LONG).show();
            }

            break;

        case 1:                         // Error

            Toast.makeText(myActivity, mError, Toast.LENGTH_LONG).show();
            break;

        }

    }

}

「myActivity」への参照は、Activity クラスへの参照に置き換える必要があります

于 2012-05-09T17:37:49.240 に答える
0

FWIW、mozillaには、apacheライセンスの完全にJavaScriptのPDFリーダーがあります。余分なサイズが気にならない場合は、検討する価値があるかもしれません。そうすれば、ブラウザー内ですべてを実行でき、サードパーティの PDF リーダーに依存する必要がなくなります。

于 2014-07-11T18:05:38.747 に答える