我正在创建一个内部存储文件(/ data / data / package_name / myfile_name),我想发送带附件的文件,但我在附件中得到一个空白文件(虽然我从文件资源管理器中检查了该文件,文件存在且在同一位置不为空)。
当我使用外部存储时,相同的代码运行良好(我在附件中获取实际文件)。是否有任何限制我们无法发送内部存储中存在的文件?或者我错过的其他步骤?
答案 0 :(得分:5)
我假设您尝试使用意图将文件作为电子邮件附件发送。
该文件为空的原因是电子邮件应用程序无法访问/data/data/package_name/myfile_name
中的文件,原因是Androids安全模型(/data/data/package_name
目录是您应用的私有目录)。 / p>
要将文件添加为附件,您需要将其写入公共存储(例如SD卡),以便电子邮件应用可以访问它。
答案 1 :(得分:1)
您如何知道您感兴趣的路径中存在该文件?应用程序将其保存在那里后,您可以使用DDMS或ADB查看它吗?您使用什么代码来保存/读取文件?我或许能够提供更具体的帮助。
用于获取任何给定设备上的内部存储目录的方法是Context.getFilesDir()
。要创建对名为“myfile.dat”的文件的引用,例如:
File myFile = new File(getFilesDir(),"myfile.dat");
假设您从Activity或其他Context中调用代码。为了将此文件附加到电子邮件中,您将Uri
作为额外内容传递到该位置,因此我们将该创建添加到示例中:
File myFile = new File(getFilesDir(),"myfile.dat");
Uri fileUri = Uri.fromFile(myFile);
这是假设文件首先正确保存到内部存储中。
希望有帮助!