2011-04-23 112 views
13

我有一个应用程序保存从服务器下载的文件。这些文件对于我的应用程序不是私人的,并且也应该可供其他应用程序访问。我想知道当SD卡不可用时,保存这些文件的正确路径是什么。对于SD卡,还有就是众所周知的API -将公共文件保存在内部存储器中

getExternalStorageDirectory() 

对于在内部存储器中的应用程序的私有数据有 -

Context.getFilesDir() 

在某些设备上,内部存储器由/ EMMC代表/。

如果有人能详细论述/ emmc /,这将会非常有帮助。我知道它代表嵌入式存储卡,并不存在于所有设备中。但它是否真的代表了内部记忆?或者它是第三个存储器?

我应该使用openFileOutput()MODE_WORLD_READABLE保存文件吗?

回答

9

在某些设备上,内部存储器由/ emmc /表示。

/emmc/可能存在某些设备上,它可能是内部的,但它可能不是应用程序访问,除非出现这种情况是什么getExternalStorageDirectory()回报也肯定是没有了Android SDK的一部分。

但是它真的代表了内部存储器吗?

或者是它的第三内存?

问问你的设备制造商。

我应该使用openFileOutput()与MODE_WORLD_READABLE保存文件吗?

这是不可能在摘要中回答的。你说你的文件“其他应用程序也应该可以访问”,但是你没有指出为什么你期望任何其他应用程序关心你的文件。其他应用程序不会扫描您的目录中的文件 - 充其量,它们将允许用户浏览外部存储。具有MODE_WORLD_READABLE文件的唯一原因是如果您的应用程序将触发另一个应用程序对文件执行某些操作(例如,ACTION_VIEWIntent)。

+0

感谢CommonsWare!是的,我的应用程序使用ACTION_VIEW触发其他应用程序正是我将这些文件公开地称为这些文件的原因。此外,由于某些文件浏览器和应用程序扫描SD卡以及内部存储器,我希望它们能够找到这些文件。所以,我的问题仍然存在,以防万一SD卡找不到的地方保存文件? – Akshay 2011-04-23 14:33:44

+0

@Akshay:“另外,由于某些文件浏览器和应用程序扫描SD卡以及内部存储器,我希望它们能够找到这些文件。” - 这是不可能的,或者如果是的话,这是一个重大的安全漏洞。 “所以,我的问题仍然存在,在没有找到SD卡的情况下保存文件的位置?” - 'getFilesDir()'。 – CommonsWare 2011-04-23 14:39:37

+0

谢谢CommonsWare!我想明白这一点。我的应用程序可以与下载附件并允许文档查看器和媒体播放器打开这些文件的电子邮件客户端进行比较。如果SD卡不在,电子邮件客户端将保存文件在哪里?内部存储器中是否没有公共目录?像/ internal_memory/downloads?为什么你会考虑将内存作为安全漏洞进行扫描?只是为了确认,内部存储器意味着设备/手机存储器,对吧?很抱歉,有些问题。 – Akshay 2011-04-23 14:51:18

14

我意识到这是陈旧的,并且有一个被接受的答案,但我认为这个问题仍然相关,并且有一种方法可以实现提问者想要的东西。

为了解释,我相信提问者希望保存一个文件,并使其可以被其他应用程序访问(例如用于查看),而不必考虑外部存储(例如额外的权限和外部存储的可能性不存在)。

事实证明,您可以让自己的文件可以被其他应用程序读取。

File file = new File(ctx.getCacheDir(), "picture");    
... 
file.setReadable(true, false); 
    // makes file readable to other apps 

// Get another app to view my picture 
Uri uri = Uri.fromFile(file);   
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(uri, "image/*"); 
ctx.startActivity(intent); 

setReadable使上述代码适用于我 - 没有该行查看器应用程序无法读取该文件。请注意,setReadable在整个目录上运行,因此最好的解决方案可能是创建一个子目录名称'public'并将文件放在那里。

+3

你的救命啊!被接受的答案过于关注为什么你不应该这样做,而不是实际的方式。 – 2016-01-15 19:21:46

相关问题