2017-05-22 8 views
0

アプリケーションでは、API呼び出しからPDFを受け取るため、バイト配列の内部にあり、ユーザーの携帯電話に保存することなくアプリケーション内に表示したいと考えています。私はWebViewを試しましたが、うまくいきませんでした。 WebViewはURLからのPDFを表示するようですが、PDFに文字列として渡すとレンダリングしません。Android:アンドロイドアプリケーションの中にPDFを表示

ユーザーの携帯電話にPDFを保存しなくても、アンドロイドアプリケーション内にPDFを表示する方法があったのでしょうか?

+1

BufferedInputStreamにバイトを入れて、tmpファイルを作成してファイルをwebviewに渡そうとしましたか?また、ファイルを作成し、意図Actio.View – user6547359

+0

を行う "私は、ユーザーの携帯電話にそれを保存することなくアンドロイドアプリケーションの中にPDFを表示する方法があるのだろうかと思っていた" - ほとんどのPDFレンダリングオプションは、これは主に、メモリ内で保持するには大きすぎる可能性があるPDFを表示することを目的としているためです。 "webviewのように見えるが、URLからpdfを表示するが、pdfを文字列として与えるとレンダリングしない" - 'WebView'にはPDFをレンダリングする機能が組み込まれていません。 – CommonsWare

答えて

1

これは、受信したPDFファイルのバイトを一時キャッシュDIRに書き込み、インテントでオープンすることで実現しています。例えば、非同期タスクの場合、私はdoInBackgroundメソッドでファイルをダウンロードし、onPostExecuteでこれを行います。

@Override 
protected void onPostExecute(byte[] result) { 
    final File reportFile = new File(context.getExternalCacheDir(), "pdf-file.pdf"); 

    final BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(reportFile)); 
    output.write(result); 
    output.close(); 

    Uri path = FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".fileprovider", reportFile); 
    final Intent intent = new Intent(Intent.ACTION_VIEW); 

    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.setDataAndType(path, "application/pdf"); 
    startActivity(intent); 
} 

これは非常にうまくいきます。あなたがしなければならないのは、ユーザが動作しているPDFリーダーがインストールされているかどうかをチェックすることだけです。 このソリューションでは、印刷物、店舗、共有など、自分が望むものをさらにpdfで利用できるようにするという利点があります。あなたがアプリ内のフレーム内にそれを表示するだけでは、相互作用の可能性をかなり制限することになります(または自分ですべてを実装する必要があります)。

+0

それはキャッシュディレクトリにあります(内部のキャッシュディレクトリに格納することもできます。アプリ内でアクセスできます)。しかし、アンドロイドはキャッシュ自体を処理することができるので、実際に削除する必要はありません。 – stamanuel

+0

ありがとう私はこのショットを与える! –

関連する問題