15

从这里我知道了一种编写文件并可供其他应用程序和其他意图访问的方法,但现在 Context.MODE_WORLD_READABLE 已弃用,我该如何安全地完成此操作?

FileOutputStream out = myActivity.openFileOutput(fileTo, Context.MODE_WORLD_READABLE);

好的更多信息:

我正在使用这个:

intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "video/*");

uri 将是我将写入 sdcard 位置的那个。视频将来自应用程序,所以问题是,如果现在不允许这样做,我该如何编写文件并查看它。

4

3 回答 3

12

uri 将是我将写入 sdcard 位置的那个。

这已经MODE_WORLD_WRITABLE是默认的了。另请注意,您列出的代码 ( openFileOutput()) 不会写入外部存储(您错误地称为“sdcard”)。openFileOutput()用于内部存储。

视频将来自应用程序,所以问题是,如果现在不允许这样做,我该如何编写文件并查看它。

如果您真的要将文件写入外部存储,只需使用Uri指向该文件的指针。

如果您要将文件写入内部存储,请创建一个ContentProvider来提供该文件,并使用Uri指向该ContentProvider. 这是一个示例应用程序,它在第一次运行时ContentProvider提取 PDF 文件,然后通过提供该文件,以便 PDF 查看器查看。assets/openFile()

于 2012-12-13T13:04:43.050 回答
9

使用以下方法将视频保存在内部存储器中:

openFileOutput("test.mp4", "MODE_PRIVATE");

然后这样做:

String path = context.getFilesDir().getAbsolutePath() + "/test.mp4"; // path to the root of internal memory.
File f = new File(path);
f.setReadable(true, false);
Intent playIntent ....
playIntent.setType("video/*");
playIntent.setData(Uri.fromFile(f));

祝你好运。

于 2013-06-27T00:08:08.753 回答
3

看起来文档对此很清楚。

此常量在 API 级别 17 中已弃用。

创建世界可读的文件是非常危险的,并且可能会导致应用程序中的安全漏洞。强烈建议不要这样做;相反,应用程序应该使用更正式的交互机制,例如 ContentProvider、BroadcastReceiver 和 Service。无法保证此访问模式将保留在文件上,例如在进行备份和恢复时。文件创建模式:允许所有其他应用程序对创建的文件具有读取权限。

于 2012-12-13T09:29:55.570 回答