我遇到了一个奇怪的问题。我写android应用程序下载mp3文件。我用url下载mp3,它运行正常。但是除了VLC之外的任何播放器都无法在设备上找到这些下载的mp3文件。如果我使用任何文件管理器,我可以找到这些文件,但他们没有mp3标签。
例如。
这是随我的应用程序下载的文件。我用FX文件管理器打开它的属性。
它是用另一个程序(不是我的)下载的mp3。如您所见,该文件有mp3标签(显示在屏幕底部)
这是我下载文件的代码:
@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播放器找到?我该怎么办呢?
答案 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
}
});