I use Xamarin Android. I have a PDF File storaged in Assest folder from Xamarin Android.
I want to share this file in whatsapp, but I recive a message: "the file you picked was not a document"
I tried two ways:
This is the first way
var SendButton = FindViewById<Button>(Resource.Id.SendButton); SendButton.Click += (s, e) => { ////Create a new file in the exteranl storage and copy the file from assets folder to external storage folder Java.IO.File dstFile = new Java.IO.File(Environment.ExternalStorageDirectory.Path + "/my-pdf-File--2017.pdf"); dstFile.CreateNewFile(); var inputStream = new FileInputStream(Assets.OpenFd("my-pdf-File--2017.pdf").FileDescriptor); var outputStream = new FileOutputStream(dstFile); CopyFile(inputStream, outputStream); //to let system scan the audio file and detect it Intent intent = new Intent(Intent.ActionMediaScannerScanFile); intent.SetData(Uri.FromFile(dstFile)); this.SendBroadcast(intent); //share the Uri of the file var sharingIntent = new Intent(); sharingIntent.SetAction(Intent.ActionSend); sharingIntent.PutExtra(Intent.ExtraStream, Uri.FromFile(dstFile)); sharingIntent.SetType("application/pdf"); this.StartActivity(Intent.CreateChooser(sharingIntent, "@string/QuotationShare")); };
This is the second
//Other way var SendButton2 = FindViewById<Button>(Resource.Id.SendButton2); SendButton2.Click += (s, e) => { Intent intent = new Intent(Intent.ActionSend); intent.SetType("application/pdf"); Uri uri = Uri.Parse(Environment.ExternalStorageDirectory.Path + "/my-pdf-File--2017.pdf"); intent.PutExtra(Intent.ExtraStream, uri); try { StartActivity(Intent.CreateChooser(intent, "Share PDF file")); } catch (System.Exception ex) { Toast.MakeText(this, "Error: Cannot open or share created PDF report. " + ex.Message, ToastLength.Short).Show(); } };
In other way, when I share via email the pdf file is sent empty, "corrupt file"
What can I do?
2 Answers
Answers 1
The solution is copying de .pdf
file from assets
folder to a local storage
. Then We able to share de file.
First copy the file:
string fileName = "my-pdf-File--2017.pdf"; var localFolder = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; var MyFilePath = System.IO.Path.Combine(localFolder, fileName); using (var streamReader = new StreamReader(Assets.Open(fileName))) { using (var memstream = new MemoryStream()) { streamReader.BaseStream.CopyTo(memstream); var bytes = memstream.ToArray(); //write to local storage System.IO.File.WriteAllBytes(MyFilePath, bytes); MyFilePath = $"file://{localFolder}/{fileName}"; } }
Then share the file, from local storage:
var fileUri = Android.Net.Uri.Parse(MyFilePath); var intent = new Intent(); intent.SetFlags(ActivityFlags.ClearTop); intent.SetFlags(ActivityFlags.NewTask); intent.SetAction(Intent.ActionSend); intent.SetType("*/*"); intent.PutExtra(Intent.ExtraStream, fileUri); intent.AddFlags(ActivityFlags.GrantReadUriPermission); var chooserIntent = Intent.CreateChooser(intent, title); chooserIntent.SetFlags(ActivityFlags.ClearTop); chooserIntent.SetFlags(ActivityFlags.NewTask); Android.App.Application.Context.StartActivity(chooserIntent);
Answers 2
the file you picked was not a document
I had this issue when I trying to share a .pdf
file via WhatsApp from assets folder, but it gives me the same error as your question :
the file you picked was not a document
Finally I got a solution that copy the .pdf
file in assets folder to Download folder, it works fine :
var pathFile = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads); Java.IO.File dstFile = new Java.IO.File(pathFile.AbsolutePath + "/my-pdf-File--2017.pdf");
Effect like this.
0 comments:
Post a Comment