Android系统。要正确下载mp3

时间:2015-07-28 09:02:15

标签: java android download mp3

我遇到了一个奇怪的问题。我写android应用程序下载mp3文件。我用url下载mp3,它运行正常。但是除了VLC之外的任何播放器都无法在设备上找到这些下载的mp3文件。如果我使用任何文件管理器,我可以找到这些文件,但他们没有mp3标签。

例如。

这是随我的应用程序下载的文件。我用FX文件管理器打开它的属性。

enter image description here

它是用另一个程序(不是我的)下载的mp3。如您所见,该文件有mp3标签(显示在屏幕底部)

enter image description here

这是我下载文件的代码:

@Override
protected Void doInBackground(String... params) {               
    InputStream inputStream =  null;
    FileOutputStream fileOutput =  null;
    try {
        URL url = new URL(params[0]); 
        File file = new File(path);              
        URLConnection urlConnection = url.openConnection();

        inputStream = urlConnection.getInputStream();
        fileOutput = new FileOutputStream(file);

        int totalSize = urlConnection.getContentLength();
        int downloadedSize = 0;

        byte[] buffer = new byte[16384];
        int bufferLength = 0; 

        while ((bufferLength = inputStream.read(buffer)) > 0 ) {

            while(isPaused) {
                sleep();
            }

            if(isCancelled()) {                 
                if(file.exists())
                    file.delete();
                return null;
            }

            fileOutput.write(buffer, 0, bufferLength);
            downloadedSize += bufferLength;
            publishProgress(downloadedSize, totalSize);
        }

        if(totalSize > getFreeMemorySize()) {
        //if(true) {
            if(errorHandler != null)
                errorHandler.onMemorySizeException();
            cancel(true);
        }                       
    } catch (IOException e) {
        int i = e.hashCode();
        e.getStackTrace();
    }
    finally {
        try {

            if(inputStream != null)
                inputStream.close();
            if(fileOutput != null)
                fileOutput.close();    

        } catch (IOException e) {
            int i = e.hashCode();
            e.getStackTrace();
        }
    }
    return null;
} 

我哪里错了?为什么用我的应用程序下载的mp3文件可以用mp3播放器找到?我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

您所观察到的是MediaStore不会不断更新其数据库。数据库仅在重新启动后以及安装SD卡后更新。

如果您希望立即显示文件,则必须告诉MediaStore添加它们。

使用MediaScannerConnection.scanFile方法通知MediaStore。 (MediaScannerConnection doucumentation)请注意,您可以一次添加多个文件/路径。另外值得注意的是,此方法是异步的,文件是在单独的进程中添加的,这可能需要一些时间 - 操作完成后会通知您。

MediaScannerConnection.scanFile(
  context,
  new String[]{file.getAbsolutePath()},
  null,
  new OnScanCompletedListener() {
     @Override
     public void onScanCompleted(String path, Uri uri) {
         // only at this point are files in MediaStore
     }
  });