4

私はPDFに取り組んでいます。以下のコードを使用して、アプリケーションからPDFファイルを開こうとしています。しかし、私は開くことができませんでした。

private void openPdf() {

        File file = new File("mnt/sdcard.test.pdf");
        Uri path = Uri.fromFile(file);
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.setAction(Intent.ACTION_VIEW);
        intent.setData(path);
        intent.setType("application/pdf");
        try {
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
            Toast.makeText(getActivity(), "No application found",
                    Toast.LENGTH_SHORT).show();
        }
    }

このコードをエミュレーターで試してみると、「アプリケーションが見つかりません」というトーストが表示されます(bcoz、通常、エミュレーターにはpdf表示アプリケーションがインストールされていません)。同じことをデバイス(特にfunbookタブとsonyタブ)でテストしたところ、Toastメッセージが表示されず、pdfファイルも開かれませんでした。誰かが私のコードの間違いを指摘できますか?実際、私は初めてpdfを使用しています。だから私の質問は、

  1. デバイスでは、トーストメッセージが表示されませんでした。つまり、携帯電話にPDF表示アプリケーションがインストールされていますか?正しいですか?
  2. もしそうなら、なぜpdfはサードパーティのアプリケーションを使用して開かれません。
  3. 携帯電話にインストールされているすべてのPDF表示アプリケーションをユーザーに一覧表示したい場合、このコードにどのような変更を加える必要がありますか?
4

7 に答える 7

4

上記の問題は解決しましたので、一度お試しください。

手順:-

  1. アプリ名の下の src に assets フォルダーを作成します。

  2. このアセット フォルダーに、pdf ファイル (例: schedule1.pdf) を保存します。

  3. 今あなたの活動、すなわちMainActivity.javaが来ます

  4. 必要なUIコンポーネントのsetListener、つまり(、、Button);ImageViewImageButton

  5. このリスナーでは、1 つのユーザー定義メソッドを呼び出します。openPDFFiles()

openPDFFiles() メソッドには以下のコードがあります。

private void openPDFFiles() {
    AssetManager assetManager = getAssets();

    InputStream in = null;
    OutputStream out = null;
    File file = new File(getFilesDir(), “schedule1.pdf”);//here schedule1.pdf is the pdf file name which is keep in assets folder.
    try {
        in = assetManager.open(“schedule1.pdf”);
        out = openFileOutput(file.getName(), Context.MODE_WORLD_READABLE);

        copyFile(in, out);
        in.close();
        in = null;
        out.flush();
        out.close();
        out = null;
    } catch (Exception e) {
        Log.e(“tag”, e.getMessage());
    }

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.parse(“file://” + getFilesDir() + “/schedule1.pdf”), “application/pdf”);

    startActivity(intent);
}

private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while ((read = in.read(buffer)) != -1) {
        out.write(buffer, 0, read);
    }
}
于 2015-03-16T06:50:45.050 に答える
3

LuxuryMode の方法を試してください: https://stackoverflow.com/a/8221594/1500067

adobe パッケージが不足していると思います。

于 2012-07-09T15:44:00.417 に答える
2

アプリでSDカードからファイルを開いていませんが、正常に機能するほぼ同じコードがあります。

Activity mActivity = /* your activity */...;
String mFileName = /* path of my PDF file */...;

Uri uri  = Uri.fromFile(mActivity.getFileStreamPath(mFileName));

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

だからあなたのアプローチは正しいです。最初にファイルを開くことができることを確認してください...つまり、mActivity.openFileInput()を使用して、読み取り可能なPDFがあることを確認してください。

于 2012-07-09T20:08:46.257 に答える
2

これは、サードパーティのライブラリ統合を使用して実現できます。SDK を含む作業ライブラリを以下に示します。

https://github.com/JoanZapata/android-pdfview
https://github.com/jblough/Android-Pdf-Viewer-Library

NDKで

https://code.google.com/p/mupdf/downloads/detail?name=mupdf-1.2-source.zip&can=2&q=

@の使い方ガイド

http://dixitpatel.com/integrating-pdf-in-android-application/

于 2015-08-17T10:30:49.007 に答える