これは、受信した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で利用できるようにするという利点があります。あなたがアプリ内のフレーム内にそれを表示するだけでは、相互作用の可能性をかなり制限することになります(または自分ですべてを実装する必要があります)。
BufferedInputStreamにバイトを入れて、tmpファイルを作成してファイルをwebviewに渡そうとしましたか?また、ファイルを作成し、意図Actio.View – user6547359
を行う "私は、ユーザーの携帯電話にそれを保存することなくアンドロイドアプリケーションの中にPDFを表示する方法があるのだろうかと思っていた" - ほとんどのPDFレンダリングオプションは、これは主に、メモリ内で保持するには大きすぎる可能性があるPDFを表示することを目的としているためです。 "webviewのように見えるが、URLからpdfを表示するが、pdfを文字列として与えるとレンダリングしない" - 'WebView'にはPDFをレンダリングする機能が組み込まれていません。 – CommonsWare