Android:已弃用的Context.MODE_WORLD_READABLE的替代方案?

Mar*_*arl 15 video android video-processing

从这里我知道一种编写文件的方法,可以访问其他应用程序和其他意图,但现在不推荐使用Context.MODE_WORLD_READABLE,我怎样才能安全地完成此操作?

FileOutputStream out = myActivity.openFileOutput(fileTo, Context.MODE_WORLD_READABLE);
Run Code Online (Sandbox Code Playgroud)

好的更多信息:

我正在使用这个:

intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "video/*");
Run Code Online (Sandbox Code Playgroud)

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

Com*_*are 12

而uri将是我将写入SD卡位置的那个.

这已经MODE_WORLD_WRITABLE是默认情况.另外请注意,您列出的代码(openFileOutput())并没有写入外部存储(你不正确称之为"SD卡").openFileOutput()用于内部存储.

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

如果您确实将文件写入外部存储,只需使用Uri指向该文件即可.

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

  • @DanielSmith:"那么......是不是可以播放存储在内部缓存中的视频?" - 如果你使文件具有世界可读性(在API Level 9+上通过`openFileOutput()`或`setReadable(true)`),它应该是可播放的.我听说有人设置HTTP守护进程来播放内部存储中的视频,尽管这看起来很痛苦.而且由于任何想要通过生根进入内部存储的人都不会喜欢内部存储是一个坚不可摧的堡垒. (2认同)

has*_*san 8

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

openFileOutput("test.mp4", "MODE_PRIVATE");
Run Code Online (Sandbox Code Playgroud)

然后这样做:

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));
Run Code Online (Sandbox Code Playgroud)

祝好运.