我在从Android应用程序的缓存文件夹中获取文件时遇到问题。这是我正在尝试但不起作用的地方:
File cacheDir = getApplicationContext().getCacheDir();
myFile = File.createTempFile("filename", ".mp3", cacheDir);
...
// Here I have to code to initialize the file
...
Log.i(LOG_TAG, "file.length = "+myFile.length()); // This logs correct info
...
//File file = new File(myFile.getPath());
//Log.i(LOG_TAG, "file.length() = "+file.length()); // This logs 0
//Log.i(LOG_TAG, "file.name = "+file.getName()); // This is correct
String fileURI = myFile.getPath();
mediaPlayer.setDataSource(fileURI);
mediaPlayer.prepare(); // This crashes
正如您所看到的,该文件似乎不包含任何内容。但是我试图用这段代码交换两行第一行,然后就可以了。
myFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MYFOLDER/filename.mp3");
我没有找到任何方法来设置没有URI的mediaPlayer,当我尝试从URI中获取文件时,这似乎是一个问题。
您是否有解决方案如何从缓存目录中获取文件?
答案 0 :(得分:0)
好的,我自己找到了解决方案。首先,我可以通过使用以下命令更改createTempFile来“添加内容”:
myFile = new File(getFilesDir(), "filename.mp3");
很遗憾,似乎无法从此目录中读取文件。您可以阅读有关此here的更多信息。
因此我发现了this帖子,我设法解决了这个问题。这是我的最终代码:
myFile = new File(getFilesDir(), "filename.mp3");
...
Button playBtn = (Button) findViewById(R.id.button_play);
playBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
play(myFile);
}
});
...
public void play(File f) {
try {
FileInputStream fis = new FileInputStream(f);
mediaPlayer.setDataSource(fis.getFD());
mediaPlayer.prepare();
mediaPlayer.start();
...
如果你无法传递文件,那么我无法帮助你。但是,如果找到解决方案,请发布解决方案。