2012-09-25 113 views
16

如何打开以前存储在“privat”文件系统中的文件?该文件正在通过web服务下载,并应存储在本地fs上。 尝试通过Intent(Action_View)打开文件时出现“奇怪”错误。尽管该文件存在于文件系统中(在emulator/eclipse中的文件浏览器中看到了该文件),但它不会显示在启动的调用Galery活动中。画面中没有内容(除了操作栏)显示黑屏。尝试通过此方法打开pdf/movie/mp3文件时会发生同样的情况(例如,pdf说文件已损坏)。如何通过意图在Android中打开文件

BTW:已存储在本地fs中的数据是有效的(未损坏),我从网上下载的调试器(通过拉法)的文件和文件可以在我的工作站上打开...

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(); 
    } 
}   
+0

也许http://stackoverflow.com/questions/11068648/launching-an-intent-for-file - 和 - MIME类型/ 11088980#11088980可以帮助。 – ademar111190

回答

2

将位置设置为“openFileOutput("fileName", Activity.MODE_WORLD_READABLE)”时,它将起作用。其他应用无法读取数据(即使是观看)设置为当存储“Context.MODE_PRIVATE

看到other post on stackoverflow

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); 
+0

不,这将无法正常工作......问题是活动成功启动(Galery,电影/音频播放器,pdf阅读器),但内容(文件)似乎无效... –

+0

附件返回正确的mimetype,否则正确的活动(Galery/Mediaplayer/PDF-Reader)根本不会被启动。 –

+0

错误。 getMimeTypeFromExtension的参数必须是不带前导'。'的文件扩展名。 – armandooj

2

您无法打开文件,这些文件不是这样的SD卡。 你需要将文件复制到SD卡然后打开它。

+0

你可以给我一个链接,这是由谷歌证实(在SDK中的文档)。我在官方文档中没有找到任何有关这方面的信息... 顺便说一下:当我在自己的活动中打开文件时,它可以处理图片的效果... –

+0

不幸的是,我说的是经验,所以我没有有一个链接。但它的上传或电子邮件中的文件是没有在SDCARD中的相同的问题...它与打开webview页面等相同。希望它有助于...对不起,如果不是.. – Givi

+0

所以我必须编写自己的查看器 - 可以处理存储在该私人文件夹中的文件的“活动”? –

相关问题