这是我在我的应用程序中尝试做的事情。我下载文件(docx、pptx、pdf、mov 等)并将它们存储在File
. 下载文件后,我希望用户能够打开并阅读它。我不希望用户能够修改File
!
这是我尝试实现这一目标的方法。
String uri = nameFileStatic + extension;
RestClientGetAsFile client = new RestClientGetAsFile(url, getActivity(), uri) {
@Override
protected void onPostExecute(File results) {
if (results != null) {
if (results.exists()) {
Uri path = Uri.fromFile(results);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, type); //type
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(DescriberAttachments.this.getActivity(),
"No Application Available to View file with extension " + extension, Toast.LENGTH_SHORT).show();
}
}
}
}
};
client.execute();
基本上,我在 AsyncTask 实例中下载文件。然后在onPostExecute()
方法中,我使用 Intent 打开文件。
现在的问题是:在哪里存储文件?这是我尝试过的:
- 乌里=
getDir("SLIMS", Context.MODE_WORLD_READABLE ).getAbsolutePath() + "/Attachments/myfile.docx"
。在保存文件之前,我总是确保目录存在。
File directoryMain = new File(getDir("SLIMS", Context.MODE_PRIVATE).getAbsolutePath()); directoryMain.mkdir(); File directoryAttachments = new File( getDir("SLIMS", Context.MODE_PRIVATE).getAbsolutePath() + "/Attachments"); directoryAttachments.mkdir();
不幸的是,之后我无法打开文件...我收到一条消息错误(来自 Polaris Office),但在我的日志中找不到任何相关消息。
uri =
getFilesDir() + "/Attachments/myfile.docx".
我得到了与前一点相同的错误。乌里=
Environment.getExternalStorageDirectory() + "/Attachments/myfile.docx"
。这次我可以在 Polaris Office 中打开文件,但我无法将其File
设为只读。我试过了myFile.setReadOnly()
,myFile.setReadable(true)
但myFile.setWritable(false)
最后我仍然能够修改文件。
所以我想现在我仍然会将这些文件存储在 sdcard 中,但我真的对写权限感到恼火。
有什么建议吗?