Возникла очень интересная проблема.
Имеем директорию (например mnt/sdcard/myapp/mydir).
В неё загружаем mp3 файл из интернета.
Файл успешно загружается в директорию и всё нормально.
Но когда размер этой папки (или количество файлов в ней — я ещё не понял) становится слишком большим (>800 мбайт) или соответственно, становится слишком много файлов — файлы начинают загружаться туда через раз, и то не все. Пересоздание этой папки (и удаление оттуда файлов) помогает.
Вот функция загрузки в сервисе:
Мой код (обращения к UI убрал)private void downloadAudio(final Audio audio)
{
final String audioDirPath=PathPackage.audioDirPath;
final String audioName = audio.title;
final long aid = audio.aid;
File audioFile = new File(audioDirPath+ "/" + audio.title +"["+audio.aid+"]"+".mp3");
Log.i("DownloadManager", "Start download to: " + audioFile.getAbsolutePath());
byte[] buffer = new byte[1024];
URL url = null;
int totalSize=0;
int loaded=0;
try {
url = new URL(audio.url);
} catch (MalformedURLException e1) {
e1.printStackTrace();
return;
}
URLConnection ucon = null;
try {
ucon = url.openConnection();
ucon.setReadTimeout(TIMEOUT_CONNECTION);
ucon.setConnectTimeout(TIMEOUT_SOCKET);
} catch (IOException e1) {
e1.printStackTrace();
Toast.makeText(this, e1.getMessage(), Toast.LENGTH_LONG).show();
return;
}
InputStream is = null;
try {
is = ucon.getInputStream();
} catch (IOException e1) {
e1.printStackTrace();
Toast.makeText(getApplicationContext(), e1.getMessage(), Toast.LENGTH_LONG).show();
return;
}
totalSize = ucon.getContentLength();
BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5);
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream(audioFile);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
int read = 0;
try {
while ((read = inStream.read(buffer)) != -1)
{
outStream.write(buffer,0,read);
} catch (Exception e)
{
e.printStackTrace();
}
try {
outStream.flush();
outStream.close();
inStream.close();
} catch (Exception e){
e.printStackTrace();
}
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
}
Очень надеюсь на вашу помощь)