Dans mon application, vous pouvez télécharger des fichiers. J'ai utilisé la classe Android DownloadManager
pour le téléchargement. Une fois le téléchargement terminé, un message m'indiquant que le fichier a été téléchargé s'affiche. Le problème est qu'il pourrait y avoir 2, 3 ou 4 téléchargements en même temps. Mon code BroadcastReceiver
ressemble à ceci:
receiver_complete = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE) ){
Toast.makeText(MainActivity.this, MainActivity.this.getString(R.string.download_finished, "Here should be the name", Toast.LENGTH_SHORT).show();
}
}
};
Comment puis-je obtenir le nom de fichier actuel du téléchargement terminé?
Merci beaucoup.
Je pense que vous voulez mettre quelque chose comme ceci dans votre bloc if
. Remplacez YOUR_DM
par votre instance DownloadManager.
Bundle extras = intent.getExtras();
DownloadManager.Query q = new DownloadManager.Query();
q.setFilterById(extras.getLong(DownloadManager.EXTRA_DOWNLOAD_ID));
Cursor c = YOUR_DM.query(q);
if (c.moveToFirst()) {
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
if (status == DownloadManager.STATUS_SUCCESSFUL) {
// process download
title = c.getString(c.getColumnIndex(DownloadManager.COLUMN_TITLE));
// get other required data by changing the constant passed to getColumnIndex
}
}
Ian Shannon avait parfaitement raison avec sa réponse, mais j'avance un peu en amélioration:
N'oubliez pas de fermer cette Cursor
après l'avoir utilisée, en évitant les "fuites de curseur". Cette Cursor
consomme beaucoup de ressources et doit être publiée dès que possible.
Si vous mettez un titre pour le téléchargement, tel que:
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setTitle("Some title");
La valeur donnée par le DownloadManager.COLUMN_TITLE
sera "Some title"
au lieu du nom du fichier. Je recommanderais donc ceci à la place:
String filePath = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
title = filePath.substring( filePath.lastIndexOf('/')+1, filePath.length() );
Le COLUMN_LOCAL_FILENAME
renvoie le chemin complet (/storage/sdcard0/Android/data/.../filename.ext
), mais avec ce code, nous n'obtiendrons que le nom du fichier.
Code final:
Bundle extras = intent.getExtras();
DownloadManager.Query q = new DownloadManager.Query();
q.setFilterById(extras.getLong(DownloadManager.EXTRA_DOWNLOAD_ID));
Cursor c = YOUR_DM.query(q);
if (c.moveToFirst()) {
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
if (status == DownloadManager.STATUS_SUCCESSFUL) {
String filePath = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
filename = filePath.substring( filePath.lastIndexOf('/')+1, filePath.length() );
}
}
c.close();
Modifier: Remplacez YOUR_DM par votre instance DownloadManager.
Je pense que ce que vous recherchez est le DownloadManager.COLUMN_TITLE
Voici un lien vers les documents Android: http://developer.Android.com/reference/Android/app/DownloadManager.html#COLUMN_TITLE
Et voici un tutoriel qui expliquera plus que l'obtention du titre. C'est pour télécharger une image à partir d'une URL et l'afficher ensuite dans une application. Puissant utile je pense, parlant en général.
u essayez ce code pour obtenir le nom du fichier
DownloadManager.COLUMN_LOCAL_FILENAME
je ne suis pas sûr de ça