gpt4 book ai didi

java - 内部存储 : Why is getFilesDir() giving me the wrong folder?

转载 作者:行者123 更新时间:2023-12-02 01:27:50 27 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序。我想将文件从 Firebase 存储下载到内部存储,然后能够播放它们(音频文件)。我使用 getFilesDir() 来实现这一点。

模拟器上一切正常。我的音频目录位于

/data/user/0/com.package.name/files/audio/

此问题出现在某些使用 Android API 28 的华为设备(手机和平板电脑)上。

我收到错误消息,在上述位置找不到我的音频文件夹,通过设备文件资源管理器,我可以清楚地看到没有 data/user/ 文件夹,而是系统仍然使用旧的 /data/data/com.package.name/ 目录。

所以我的问题是:

有人知道为什么 getFilesDir() 没有给我正确的路径,以及如何在不硬编码路径的情况下解决这个问题。

这是一些代码,我也尝试在根文件夹上调用exists(),但没有成功。

    String filename = document.getId() + ".m4a";
String rootPath = getFilesDir().getAbsolutePath();
File root = new File(rootPath);

//not working
if(!root.exists()){
rootPath = "/data/data/" + getPackageName() + File.separator + "files"
+ File.separator + "voice" + File.separator;
}
//

String folderPath = rootPath + File.separator + "voice" + File.separator;
File subFolder = new File(folderPath);

if(!subFolder.exists()){
subFolder.mkdir();
}

final File localFile = new File(subFolder, filename);
final StorageReference voiceRef = uploadsRef.child("voice").child(filename);
voiceRef.getFile(localFile);

最佳答案

getFilesDir() 可以并且确实根据您运行的设备甚至运行您的应用程序的用户(对于支持多个用户的设备)返回不同的绝对路径(即 user/0 你看到的)。

只要您正在操作 getFilesDir() 返回的目录或其子目录(例如您的 new File(getFilesDir(), "voice") 目录),一切都可以在每个设备上运行。

关于java - 内部存储 : Why is getFilesDir() giving me the wrong folder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56605934/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com