如何在Unity应用程序中访问Android内部存储中的文件?

5
我正在使用EasyMovieTexture插件,我想要访问安卓文件夹,其中所有视频都被保存。首先,我尝试访问流式资产文件夹,但它在应用程序中是不可访问的(在安卓中将文件复制到资产文件夹中),因此我已经创建了一个包含所有视频的文件夹,并希望访问该特定文件夹以单独播放视频。这是一段从URL加载视频的示例代码,但我想从存储器中访问它 -
void OnGUI() {


    if( GUI.Button(new Rect(50,50,100,100),"Load"))
    {
        scrMedia.Load("Url of video");
        m_bFinish = false;
    }

如何访问间隔存储中的视频并播放它们。谢谢提前。


你找到了这个问题的简单解决方案吗?我也在尝试做同样的事情 :)我看到了你的评论,使用了 /storage/emulated/0/Android/data/com.app.app/cache/ebd_tmp/123.mp4 文件路径。假设 'ebd_tmp' 是你自己在 UNity 项目资产文件夹根目录下创建的文件夹?这似乎有点难以找到... 是否有一种方法可以指向用户设备上的一个合理文件夹,比如“视频”或“下载”? 谢谢 - baroquedub
2个回答

6

Application.persistentDataPath 指定的目录通常为空,除非 Unity 应用程序向其中写入了某些内容(例如保存文件)。基于此,视频文件只会在有东西放置在那里时才存在。 - rutter
@rutter 我也有同样的想法,我尝试使用Application.temporaryCachePath并将文件存储在正在运行的应用程序中,但无法访问它们。 - Kratasz
是的,该目录为空。我曾经使用AndroidFileTransfer将我的EasyMovieTexture视频保存在那里,以便在应用程序中访问。 - taj

0

StreamingAssets文件夹中的任何文件都将包含在您的构建中,并可通过Application.streamingAssetsPath指定的路径访问。

然而,手册提到了Android的一个重要警告:

在Android上,这些文件包含在一个压缩的.jar文件中(实际上与标准zip压缩文件相同)。这意味着,如果您不使用Unity的WWW类来检索文件,则需要使用其他软件查看.jar存档中的内容并获取文件。

如果您的视频插件可以访问APK中的文件,则只需指定正确的路径即可。

如果您的视频插件需要传统文件,则需要创建一个。 Unity的WWW类可以将压缩文件读入内存,然后您可以使用System.File.WriteAllBytes将其写入其他位置(例如Application.temporaryCachePath)。


将文件保存在目录 -/storage/emulated/0/Android/data/com.app.app/cache/ebd_tmp/- 中,但在调试时仍然出现错误 - 错误 m_MediaPlayer.setDataSource():/storage/emulated/0/Android/data/com.app.app/cache/ebd_tmp/123.mp4 System.err: java.io.FileNotFoundException: /storage/emulated/0/Android/data/com.app.app/cache/ebd_tmp/123.mp4 - Kratasz
文件在那里,但无法读取它。我做错了什么? - Kratasz
1
没事了,只需要在前面加上 "file://" 就可以了。谢谢。 - Kratasz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接