Я пытаюсь загрузить аудио по URL-адресу. Я использую следующий пример кода диспетчера загрузок из Github https://github.com/folee/Download_Mgr

Моя проблема в том, что если я отменю загрузку, на SD-карте все еще будет неполный mp3-файл. Как я могу удалить неполные файлы mp3?

 @Override
    public void onClick(View v) {
        Intent downloadIntent = new Intent(DownloadValues.Actions.DOWNLOAD_SERVICE_ACTION);

        switch (v.getId()) {
        case R.id.btn_continue:
            // mDownloadManager.continueTask(mPosition);
            downloadIntent.putExtra(DownloadValues.TYPE, DownloadValues.Types.CONTINUE);
            downloadIntent.putExtra(DownloadValues.URL, url);
            mContext.startService(downloadIntent);

            mViewHolder.continueButton.setVisibility(View.GONE);
            mViewHolder.pauseButton.setVisibility(View.VISIBLE);
            break;
        case R.id.btn_pause:
            // mDownloadManager.pauseTask(mPosition);
            downloadIntent.putExtra(DownloadValues.TYPE, DownloadValues.Types.PAUSE);
            downloadIntent.putExtra(DownloadValues.URL, url);
            mContext.startService(downloadIntent);

            mViewHolder.continueButton.setVisibility(View.VISIBLE);
            mViewHolder.pauseButton.setVisibility(View.GONE);
            break;
        case R.id.btn_delete:
            // mDownloadManager.deleteTask(mPosition);
            downloadIntent.putExtra(DownloadValues.TYPE, DownloadValues.Types.DELETE);
            downloadIntent.putExtra(DownloadValues.URL, url);
            mContext.startService(downloadIntent);

            removeItem(url);
            break;
        }
    }

Моя файловая ванна:

 public class ConfigUtils {

 public static void InitPath(Context ctx) {
    File temFile = Environment.getExternalStorageDirectory();

    if (temFile != null && temFile.canWrite() && Util.getAvailableExternalMemorySize() > 0) {
        IMG_PATH = Environment.getExternalStorageDirectory().getPath() + "/DL_Mgr/Image/";
        FILE_PATH = Environment.getExternalStorageDirectory().getPath() + "/DL_Mgr/Downloads/";
    }
    else {
        IMG_PATH = ctx.getFilesDir() + "/Image/";
        FILE_PATH = ctx.getFilesDir() + File.separator;
    }

    new File(IMG_PATH).mkdirs();
    new File(FILE_PATH).mkdirs();
    Log.i(TAG, "IMG_PATH-->" + IMG_PATH + "\n FILEPATH-->" + FILE_PATH);
}

}

Я использую этот код для удаления временных файлов, но не работаю

 case R.id.btn_delete:

            File tempFile = new File(ConfigUtils.FILE_PATH + "filename".toString());
            if(tempFile.exists()) {
                tempFile.delete();
            } 

Но это не работает РЕДАКТИРОВАТЬ: РАБОЧИЙ КОД: (Если скачать временный mp3-файл, замените его, например: "sample.mp3.download"

Так что измененный код вроде этого работает нормально

 File tempFile = new File(ConfigUtils.FILE_PATH + filename +".download".toString());
            if(tempFile.exists()) {
                tempFile.delete();
            } 
0
Mullinsangebn 16 Авг 2014 в 13:33

1 ответ

Лучший ответ
  • Перед началом загрузки. Вы должны знать, где сохраняете файл. Так что, вероятно, абсолютный путь или Uri, указывающий на файл в SDCard который вы передаете диспетчеру загрузок для хранения файла по адресу.

  • В случае отмены. создать файловый объект из этого uri или абсолютного пути и вызвать удаление для файлового объекта, если он существует. Что-то вроде этого

    File tempFile = new File(uri.toString());
    if(tempFile.exists()) {
        tempFile.delete();
    } 
    

Это должно быть просто. Погуглить

0
Rohit Sharma 16 Авг 2014 в 13:37
Убедитесь, что я изменил свой код, но он не работает ... у меня все еще есть "sample.mp3.download" на моей SD-карте
 – 
Mullinsangebn
16 Авг 2014 в 14:54
ConfigUtils.FILE_PATH.toString (). Содержит ли это полный абсолютный путь к вашему файлу? Если да, проверьте и зарегистрируйте значение вызова tempFile.exists ()
 – 
Rohit Sharma
16 Авг 2014 в 15:00
Также FILEPATH кажется каталогом, а не файлом. вы должны проверить, является ли ваш файловый объектDirectory. Если да, вам нужно выполнить итерацию для каждого файла в каталоге и создать файловый объект из них и удалить их по отдельности.
 – 
Rohit Sharma
16 Авг 2014 в 15:11
ConfigUtils.FILE_PATH - это только имя папки загрузки, поэтому я добавил файл tempFile = new File (ConfigUtils.FILE_PATH + "filename" .toString ());
 – 
Mullinsangebn
16 Авг 2014 в 15:11
Этот тоже не работает ... у меня еще есть временный файл под названием «1.mp3.download». Этот отлично работает File tempFile = new File (ConfigUtils.FILE_PATH + "1.mp3.download" .toString ()); нам нужно также имя файла с ".download", теперь оно работает
 – 
Mullinsangebn
16 Авг 2014 в 15:20