无法从android缓存目录中获取文件

时间:2015-04-02 13:02:04

标签: android file caching audio uri

我在从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中获取文件时,这似乎是一个问题。

您是否有解决方案如何从缓存目录中获取文件?

1 个答案:

答案 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();
                     ...


如果你无法传递文件,那么我无法帮助你。但是,如果找到解决方案,请发布解决方案。