Android DownloadManager. Есть ли способ получать уведомления, когда пользователь удаляет загрузку из пользовательского интерфейса?

Я не могу найти способ получать уведомления, когда пользователь отменяет загрузку в пользовательском интерфейсе DownloadManager системы:

выбор пользователя и щелчок по корзине

Я знаю, что можно установить BroadcastReceiver для загрузок, «завершенных» или «нажатых», с помощью специальных действий намерения:

  • DownloadManager.ACTION_DOWNLOAD_COMPLETE

а также

  • DownloadManager.ACTION_NOTIFICATION_CLICKED

Вместо этого мне нужно знать, когда текущая загрузка отменяется.


person dentex    schedule 28.02.2013    source источник
comment
Кажется, что это невозможно через сам DownloadManager, поэтому я думаю, что буду использовать FileObserver и опубликую результат здесь в качестве ответа для тех, кому это понадобится в будущем.   -  person dentex    schedule 28.02.2013


Ответы (1)


Как отмечалось выше, мое решение (благодаря различным страницам из SO):

// DownloadManager job from the main activity

videoUri = Uri.parse(path.toURI() + composedFilename);

dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
Request request = new Request(Uri.parse(link));
request.setDestinationUri(videoUri);
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
request.setTitle(vfilename);
enqueue = dm.enqueue(request);
Log.d(DEBUG_TAG, "_ID " + enqueue + " enqueued");

fileObserver = new Utils.delFileObserver(path.getAbsolutePath());
fileObserver.startWatching();

// delFileObserver class inside another Utility class

public static class delFileObserver extends FileObserver {
    static final String TAG="FileObserver: ";

    String rootPath;
    static final int mask = (FileObserver.CREATE | FileObserver.DELETE | FileObserver.DELETE_SELF); 

    public delFileObserver(String root){
        super(root, mask);

        if (! root.endsWith(File.separator)){
            root += File.separator;
        }
        rootPath = root;
    }

    public void onEvent(int event, String path) {

        if (event == FileObserver.DELETE || event == FileObserver.DELETE_SELF){
            Log.d(DEBUG_TAG, TAG + "file " + path + " DELETED");

            long id = settings.getLong(path, 0);
            Log.d(DEBUG_TAG, TAG + "id: " +  id);

            // actual job after a file deletion is detected
        }
    }

    public void close(){
        super.finalize();
    }
}
person dentex    schedule 03.03.2013