web-dev-qa-db-fra.com

DownloadManager.Request.setNotificationVisibility échoue avec SecurityException: valeur non valide pour la visibilité: 2

J'essaie d'utiliser DownloadManager dans une de mes classes Service:

    DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
    //imageUri is a valid Uri
    Request downloadRequest= new Request(imageUri); 
    //without this line, it works
    downloadRequest.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN);
    //subpath is valid
    downloadRequest.setDestinationInExternalFilesDir(this, null, subPath);
    downloadManager.enqueue(downloadRequest);

Sans setNotificationVisibility, ce code fonctionne bien. Mais il affiche une notification, que je ne veux pas, car j'utilise ce code pour le chargement d'images paresseuses dans un ListView.

Je comprends, cette notification peut être masquée avec

downloadRequest.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN);

Mais dans ce cas, mon application se bloque avec:

02-19 02: 24: 24.055: E/AndroidRuntime (2572): Java.lang.SecurityException: valeur non valide pour la visibilité: 2 02-19 19: 24: 24.055: E/AndroidRuntime (2572): sur Android.os.Parcel .readException (Parcel.Java:1327) 02-19 02: 24: 24.055: E/AndroidRuntime (2572): sur Android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.Java:181) 02-19 02: 24: 24.055: E/AndroidRuntime (2572): sur Android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.Java:135) 02-19 02: 24: 24.055: E/AndroidRuntime (2572): sur Android.content.ContentProviderProxy.insert (ContentProviderNative.Java: 415) 02-19 02: 24: 24.055: E/AndroidRuntime (2572): sur Android.content.ContentResolver.insert (ContentResolver.Java:730) 02-19 02: 24: 24.055: E/AndroidRuntime (2572): sur Android.app.DownloadManager.enqueue (DownloadManager.Java:885) 02-19 02: 24: 24.055: E/AndroidRuntime (2572): sur MyService.getImage (MyService.Java:112)

Quel est le problème avec setNotificationVisibility? Comment puis-je avoir la notification?

52
rds

Vous avez besoin de l'autorisation suivante dans le manifeste selon la documentation:

<uses-permission
        Android:name="Android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
122
charroch