How To Check Download Manager File Downloaded and Show File Name Xamarin.Forms Android

SimonGhost 256 Reputation points
2020-12-28T21:44:03.437+00:00

Hello Im Downloading Files Using DownloadManager and its Working Good But how to Check The File is Downloaded Done by his ID Then Get File Name To Show it On Toast...
My Code:

    var manager = DownloadManager.FromContext(Forms.Context);
    var request = new DownloadManager.Request(Android.Net.Uri.Parse(URL));
    request.SetNotificationVisibility(DownloadVisibility.VisibleNotifyCompleted);
    request.SetDestinationInExternalPublicDir(Location, FileName);
    request.SetTitle(FNameFulExt.Replace(".mp4",""));
    request.SetDescription("File is Downloading...");
    long downloadId = manager.Enqueue(request);

Some similar questions say you should use a broadcast receiver, but how can I check (downloadId ) for my files then get File Name ?
also this my broadcast receiver file:

[BroadcastReceiver]
[IntentFilter(new string[] { DownloadManager.ActionDownloadComplete })]
public class DownloadBrodacast : Android.Content.BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
       //What should I do here
    }
}

and Thanks, everyone 😊

Developer technologies | .NET | Xamarin
0 comments No comments

Answer accepted by question author
Anonymous
2020-12-29T09:03:29.807+00:00

Hello,​

Welcome to our Microsoft Q&A platform!

Agree with alessandrocaliaro, For achievement in xamarin android, you can use following code.

   [BroadcastReceiver]  
       [IntentFilter(new string[] { DownloadManager.ActionDownloadComplete })]  
       public class DownloadBrodacast : Android.Content.BroadcastReceiver  
       {  
           public override void OnReceive(Context context, Intent intent)  
           {  
               //What should I do here  
     
               String action = intent.Action;  
               if (DownloadManager.ActionDownloadComplete.Equals(action) && intent.Extras != null)  
               {  
                   Bundle extras = intent.Extras;  
                   DownloadManager.Query q = new DownloadManager.Query();  
                   long downloadId = extras.GetLong(DownloadManager.ExtraDownloadId);  
                   q.SetFilterById(downloadId);  
                   var c = ((DownloadManager)context.GetSystemService(Context.DownloadService)).InvokeQuery(q);  
                   if (c.MoveToFirst())  
                   {  
                       int status = c.GetInt(c.GetColumnIndex(DownloadManager.ColumnStatus));  
                       if (status ==(int) DownloadStatus.Successful  )  
                       {  
     
                           String downloadFilePath = (c.GetString(c.GetColumnIndex(DownloadManager.ColumnUri))).Replace("file://", "");  
                           String downloadTitle = c.GetString(c.GetColumnIndex(DownloadManager.ColumnTitle));  
                           c.Close();  
                           Toast.MakeText(Android.App.Application.Context, "DownloadPath"+ downloadFilePath, ToastLength.Short).Show();  
                           Toast.MakeText(Android.App.Application.Context, "DownloadTitle" + downloadTitle, ToastLength.Short).Show();  
     
                            
                       }  
                       else if (status ==(int) DownloadStatus.Failed)  
                       {  
     
                         var code=  c.GetInt(c.GetColumnIndex(DownloadManager.ColumnReason));  
                           Toast.MakeText(Android.App.Application.Context,"donwload filed: " + code, ToastLength.Short).Show();  
                       }  
                   }  
               }  
           }  
       }  

You can RegisterReceiver in the OnCreate method of MainActivity.cs.

   DownloadBrodacast heartRateRec = new DownloadBrodacast();  
     RegisterReceiver(heartRateRec, new IntentFilter(DownloadManager.ActionDownloadComplete));  

Best Regards,

Leon Lu


If the response is helpful, please click "Accept Answer" and upvote it.

Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

Was this answer helpful?

1 person found this answer helpful.

1 additional answer

Sort by: Most helpful
  1. Alessandro Caliaro 4,206 Reputation points
    2020-12-28T21:53:29.013+00:00

    4399386

    This is a java sample that you can use. DownlodManager has a db that contains all info you need

    Was this answer helpful?


Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.