I have my app downloading a file using the DownloadManager, however if I take the pointer from the Enqueue method and pass it to GetUriForDownloadedFile I always get a null however the file downloads every time.
I need the downloaded file name as it may not always match the filename on the server as the DownloadManager appends a -# on the file if duplicates are downloaded. Any suggestions on how to get the downloaded file name so that I can pass it to a Send Intent?
Thanks
M
Android.Net.Uri contentUri = Android.Net.Uri.Parse(uri);
Android.App.DownloadManager.Request r = new Android.App.DownloadManager.Request(contentUri);
r.SetDestinationInExternalPublicDir(Android.OS.Environment.DirectoryDownloads, filename);
r.AllowScanningByMediaScanner();
r.SetNotificationVisibility(Android.App.DownloadVisibility.VisibleNotifyCompleted);
Android.App.DownloadManager dm = (Android.App.DownloadManager)Xamarin.Forms.Forms.Context.GetSystemService(Android.Content.Context.DownloadService);
var savedFile = dm.GetUriForDownloadedFile(dm.Enqueue(r));
Posts
As is common with Xamarin Forums, I am answering my own question.
The solution is a bit convoluted, it appears you cannot get the URI for a downloaded file until the DownloadManager is done with the download. I solved my issue by catching the completed download in a BroadcastReceiver. DownloadIDsToShare is a List to ensure I don't fire the share intent on every downloaded file but only those where the user has clicked the Share Button.
good job @MikeRowley403!!!
Very helpful @MikeRowley403
For others that would like more help I found a book through hours of searching that had a good explanation.
Xamarin Mobile Development for Android Cookbook!
https://books.google.com/books?id=3fSoCwAAQBAJ&pg=PA145#v=onepage&q&f=false
Hope that helps others that may be struggling.