Dans mon application, il existe quelques fichiers que les utilisateurs peuvent télécharger. Les fichiers sont téléchargés via le gestionnaire de téléchargement Android . Mais depuis quelques semaines maintenant, des centaines d'utilisateurs se plaignent du fait que leurs fichiers sont automatiquement supprimés tous les 8 à 12 jours, sans même désinstaller l'application. (Il pourrait y avoir beaucoup plus d'utilisateurs qui n'ont pas pris la peine de se plaindre de la même chose.)
À présent, il pourrait y avoir un certain nombre de raisons, spécifiques à l'utilisateur, pour lesquelles cela se produirait sur quelques appareils. Mais vu le grand nombre d’utilisateurs, il semble que j’ai peut-être mal agi.
Pourquoi le système/gestionnaire de téléchargement supprime-t-il les fichiers automatiquement? Existe-t-il un moyen d'informer le système ou le gestionnaire de téléchargement de ne pas supprimer certains fichiers? Ou devrais-je me contenter de renommer les fichiers après le téléchargement, de manière à les dissocier du gestionnaire de téléchargement, et espérer que le problème sera résolu avec cela?
Modifier:
Voici le code que j'utilise pour télécharger les fichiers:
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(trackLink));
request.setTitle(trackTitle);
request.setDestinationInExternalPublicDir("Tracks", trackTitle + ".mp3");
request.setVisibleInDownloadsUi(false);
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
J'ai aussi rencontré ce problème. En regardant la source pour DownloadIdleService
, il apparaît que si les téléchargements sont configurés pour ne pas être visibles dans l'interface utilisateur, ils sont supprimés au bout de 7 jours car ils sont considérés comme "obsolètes". Voici le javadoc fromDownloadIdleService
:
/**
* Remove stale downloads that third-party apps probably forgot about. We
* only consider non-visible downloads that haven't been touched in over a
* week.
*/
C'était trop gros pour un commentaire, je le répondais simplement.
Je ne sais pas encore pourquoi les fichiers manquent ou sont supprimés sur une période de temps - ce qui est un peu étrange. Mais je devais faire quelque chose de similaire et n'avoir jamais vécu quelque chose comme ça. Je pensais donc pouvoir partager ce que j'avais fait dans ce cas.
J'ai préféré conserver les fichiers téléchargés dans la mémoire de stockage interne de l'application plutôt que de les conserver dans la mémoire de stockage externe. Par exemple, le chemin du fichier où j'ai utilisé pour enregistrer les fichiers téléchargés est quelque chose comme ...
/data/data/" + "com.example.myapplication" + "/musicfiles/
Donc, ce que j'ai fait juste après le téléchargement, c'est informer le scanner de média du nouveau fichier afin qu'il soit immédiatement disponible pour l'utilisateur. Donc, alors que je téléchargeais le fichier en utilisant une AsyncTask
, je devais exécuter le scanner avec la méthode onPostExecute
comme ceci après un téléchargement réussi.
protected void onPostExecute() {
if(downloadCompletedSuccessfully) {
MediaScannerConnection.scanFile(context,
new String[]{file.toString()}, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
}
}
Donc, dans votre cas, je pense que ce n'est peut-être pas parce que le bouton Télécharger n'est pas visible en raison de l'indisponibilité du fichier téléchargé. Cela peut arriver si l'analyseur de média ne parvient pas à trouver le fichier dans le système de fichiers. Donc, vous pourriez envisager d'essayer.
Je ne sais pas si Clean Master ou certains logiciels comme celui-ci nettoient les fichiers inutiles de temps en temps s’ils se trouvent dans un stockage externe. Vous pourriez envisager d’enquêter sur ceux-là aussi.