Android:不推荐的Context.MODE\u WORLD\u可读的替代方案?
我知道一种编写文件并可供其他应用程序和其他意图访问的方法,但现在Context.MODE\u WORLD\u READABLE已被弃用,我如何才能安全地实现这一点Android:不推荐的Context.MODE\u WORLD\u可读的替代方案?,android,video,video-processing,Android,Video,Video Processing,我知道一种编写文件并可供其他应用程序和其他意图访问的方法,但现在Context.MODE\u WORLD\u READABLE已被弃用,我如何才能安全地实现这一点 FileOutputStream out = myActivity.openFileOutput(fileTo, Context.MODE_WORLD_READABLE); 好的,更多信息: 我用这个: intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(ur
FileOutputStream out = myActivity.openFileOutput(fileTo, Context.MODE_WORLD_READABLE);
好的,更多信息:
我用这个:
intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "video/*");
uri将是我将写入SD卡位置的uri。而视频将来自应用程序,所以问题是,如果现在不允许这样做,我如何编写文件并查看它。看起来文档对此很清楚 此常量在API级别17中被弃用 创建世界可读文件是非常危险的,并且可能导致 应用程序中的安全漏洞。强烈劝阻;相反 应用程序应该使用更正式的交互机制,例如 ContentProvider、BroadcastReceiver和服务。没有 保证此访问模式将保留在文件上,例如 它需要进行备份和恢复。文件创建模式:允许所有 对创建的文件具有读取权限的其他应用程序 uri将是我将写入SD卡位置的uri 默认情况下,该模式已经是可写的。还要注意,您列出的代码(
openFileOutput()
)没有写入外部存储器(您错误地称之为“SD卡”)<代码>openFileOutput()用于内部存储
视频将来自应用程序,所以问题是,如果现在不允许,我如何编写文件并查看它
如果确实要将文件写入外部存储器,只需使用指向该文件的Uri
如果要将文件写入内部存储器,请创建一个
ContentProvider
来提供该文件,并使用指向该ContentProvider
的Uri
。使用ContentProvider
,在第一次运行时从assets/
中提取PDF文件,然后通过openFile()
提供该文件,以便PDF查看器可以查看该文件。使用以下方法将视频保存在内存中:
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));
祝你好运。谢谢。这很恰当DIf如果视频文件已作为文件保存到内部存储器中(使用
getCacheDir
给定的位置),您是说ContentProvider可以以某种方式为视频视图提供URI,然后视频视图可以播放?因为内部保存的视频的直接URI不起作用(我猜是因为视频文件需要是全世界可读的,才能由视频视图播放,但如果在应用程序的私有内部缓存中,则不是全世界可读的)。@DanielSmith:“你是说ContentProvider可以以某种方式为视频视图提供URI,然后视频视图就可以播放了吗?“--视频很棘手,因为通常播放器需要可查找的流(可以向前或向后移动),而由内容提供商发布的流是不可查找的。我不知道任何视频格式可以用仅向前的流播放,尽管我没有研究过这一点。@commonware:那么…是否不可能播放存储在内部缓存中的视频?关于这个主题,有这么多问题,但似乎没有一个是不可能的o有工作解决方案。我当前的工作解决方案将视频临时存储在外部缓存中,但仍然可以使用adb pull…
提取视频,我更希望这些视频由内部私有缓存保护。想法?@DanielSmith:“那么。。。是否无法播放存储在内部缓存中的视频?”--如果您使文件世界可读(通过API级别9+上的openFileOutput()
,或setReadable(true)
),它应该是可播放的。我听说有人设置HTTP守护进程从内部存储播放视频,尽管这似乎很痛苦。而且,由于任何想要通过根访问内部存储的人都可以访问内部存储,这不像内部存储是一座牢不可破的堡垒。谢谢你的帮助,我不想将SD卡用于临时文件,请注意is是Api 9或更高版本,因此最终使用模式“世界可读”用于Api 8,而这用于9或更高版本。当然,最好的选择是ContentProvider,在某些情况下,这将不起作用。例如,播放器无法访问保存在视频文件相同位置的srt文件,并且使用相同的名称,即使我们为srt文件设置了“可读”。@hasan83如果我写的话使用FileOutputStream将一个文件发送到data/data/com.*****/myfolder,它不允许我像上面那样读取文件,原因是什么?