16

以前に「プライベート」ファイルシステムに保存されたファイルを開くにはどうすればよいですか?ファイルはWebサービスによってダウンロードされており、ローカルfsに保存する必要があります。インテント(Action_View)を介してファイルを開こうとすると、「奇妙な」エラーが発生しました。ファイルはファイルシステムに存在しますが(エミュレーター/エクリプスのファイルエクスプローラーでファイルを確認しました)、起動されたギャラリーアクティビティの呼び出しには表示されません。写真の代わりに、ギャラリーにはコンテンツが含まれていない黒い画面が表示されます(アクションバーを除く)。この方法でpdf/movie / mp3ファイルを開こうとしたときにも同じことが起こります(たとえば、pdfはファイルが破損していることを示しています)。

ところで:ローカルfsに保存されているデータは有効(破損していない)です。デバッガーからファイルをダウンロードし(pullメソッドを使用)、ワークステーションでファイルを開くことができます...

public void onAttachment(Context context, Attachment attachment) {
    try {
        //Attachment is a structured data object that contains of a byte[], filename and mimetype (like image/jpeg)
        FileOutputStream fos = FileOutputStream fos = context.openFileOutput(attachment.getAttachmentFileName(), Context.MODE_PRIVATE);
        fos.write(attachment.getBinary());
        fos.flush();
        fos.close();
        File f = context.getFileStreamPath(attachment.getAttachmentFileName());
        Uri uri = Uri.fromFile(f);          
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(uri,attachment.getAttachmentMimetype());
        context.startActivity(intent);                  
    } catch (IOException e) {
        e.printStackTrace();
    }
}           
4

3 に答える 3

12

コード内の添付ファイルのタイプは何ですか?おそらくそれは間違ったmimeタイプを返しますか?

このコードは私のために働きます:

File file = new File("EXAMPLE.JPG");

// Just example, you should parse file name for extension
String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(".JPG");

Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), mime);
startActivityForResult(intent, 10);
于 2012-09-25T15:13:08.860 に答える
2

そのようなSDカードにないファイルを開くことはできません。ファイルをSDカードにコピーしてから開く必要があります。

于 2012-09-25T16:19:56.527 に答える
2

場所を「openFileOutput("fileName", Activity.MODE_WORLD_READABLE)」に設定すると機能します。Context.MODE_PRIVATE他のアプリは、「 」に設定すると保存されたデータを(表示しても)読み取ることができません

stackoverflowに関する他の投稿を参照してください

于 2012-09-26T14:08:43.043 に答える