0

私はsdcardに私のrawフォルダーからpdfを渡して、デフォルトのインテントでそれを開こうとしています。

開くと、PDFが破損していると言われます。ストリームの仕組みがよくわからないので、そこから問題が発生していると思います。

final String extStorageDirectory = Environment
                        .getExternalStorageDirectory().toString();
                final String festivalDirectory_path = extStorageDirectory
                        + Constants.PDF_STORAGE_PATH;
                File pdfOutputFile = new File(festivalDirectory_path, "/");
                if (pdfOutputFile.exists() == false) {
                    pdfOutputFile.mkdirs();
                }
                File pdfFile = new File(pdfOutputFile, nameOfThePdf);

                try {
                    InputStream in = getResources().openRawResource(R.raw.blablublo);

                    FileOutputStream out = new FileOutputStream(pdfFile);
                    byte[] buffer = new byte[1024];
                    int bufferLength = 0;
                    while ((bufferLength = in.read(buffer)) > 0) {
                        out.write(buffer, 0, bufferLength);
                    }
                    out.close();
                } catch (Exception e) {
                    Log.e("tag", e.getMessage());
                }
                Uri path = Uri.fromFile(pdfFile);
//              Uri path = Uri.parse(Constants.SPLASH_URI + R.raw.cartecannotpdf);
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setDataAndType(path, "application/pdf");
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);

誰かが私を助けてくれることを願っています!

どうも

ルノー

4

1 に答える 1

0

さて、あなたのソリューションは半分完成しているようです。

InputStream inputStream = assetManager.open("cartecanotpdf.pdf");-アセットフォルダー内のPDFファイルからすべてのデータを読み取るために使用できるストリームを作成します。

File file = new File(dir, "cartecannotpdf.pdf");-これは、ファイルが配置されるSDCARD上の場所へのリンクを作成するだけです。

欠落している部分は、実際には入力ストリームから出力ストリームにバイトをコピーすることです。現時点では、SDCARD上のファイルが存在しないか、空のシェル(データがない)であるため、ファイルが破損しているとインテントが文句を言います。

これがあなたのための完全な解決策を持っているQAです。 'assets'フォルダからsdcardにファイルをコピーする方法は?

編集:さらに、ファイルをアセットフォルダーに配置する必要があるのか​​、それともRAWフォルダーに残すことができるのかわかりません。私はいつもアセットフォルダ内のファイルを操作してきました。AssetManager.open(...)を呼び出すときに、実際にファイルを取得していることを確認してください

于 2012-05-07T14:03:06.633 に答える