1

我使用从服务器下载音频文件

          try {

               // URL url = new URL("http://commonsware.com/misc/test2.3gp");
                URL url = new URL("http://192.168.0.2/supplications/"+fileName);
                //URL url = new   URL("http://www.msoftech.com/supplications/android/"+fileName);
                HttpURLConnection c = (HttpURLConnection) url.openConnection();
                c.setRequestMethod("GET");
                c.setDoOutput(true);
                c.connect();

                Log.v("log_tag", "PATH: " + PATH);
                File file = new File(PATH);
                file.mkdirs();
                File outputFile = new File(file, fileName);
                FileOutputStream fos = new FileOutputStream(outputFile);

                InputStream is = c.getInputStream();

                byte[] buffer = new byte[1024];
                int len1 = 0;
                while ((len1 = is.read(buffer)) != -1)
                {
                    fos.write(buffer, 0, len1);
                }
                fos.close();
                is.close();
            } catch (IOException e) {
                Log.d("log_tag", "Error: " + e);
            }
            Log.v("log_tag", "Check: " +cd2);

这里 PATH = "/data/data/packagename/sounds/filename

它工作正常,音频文件下载并成功播放,但我的问题是当我单击主页按钮然后重新启动应用程序时意味着找不到下载音频的文件夹,即退出应用程序时意味着所有下载的音频都被删除自动地。它抛出未找到的异常文件。

为了播放下载的文件,我使用了如下代码,

public void audioPlayer(String path, String fileName) throw FileNotFoundException
{
    //set up MediaPlayer 


FileInputStream fileInputStream = new FileInputStream(PATH+"/"+fileName);
            //String command = "chmod 666 " + recordFile.toString(); 
            try {
                mp.setDataSource(fileInputStream.getFD());
               // mp.setDataSource(path+"/"+filename.mp3);
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                mp.prepare();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mp.start();

它有什么问题我必须做什么才能永久保存音频文件。

4

1 回答 1

0

您的代码中没有任何问题,这是文件权限问题。当您将文件下载到应用程序包下的内部文件系统中时,会为其分配安全性,例如“-rw------”,这意味着您的文件只能由同一个应用程序访问。由于 android 是基于 Linux 的,因此每个文件都有一些许可。

您的文件会在那里,但其他应用程序(如媒体播放器等)无法访问,因此这些应用程序会引发错误,例如找不到文件。(您可以通过 DDMS 工具检查)。

只需将文件路径更改为外部驱动器。

如果有帮助,请采纳答案。

于 2012-06-08T06:29:45.770 回答