有一个问题我很长时间都无法解决。我想使用共享按钮从另一个应用程序到使用xamarin创建的应用程序获取PDF文件的路径。我尝试了一些方法,这些方法解决了我的问题,但是那不是我想要的。那是;我将pdf下载到手机存储中。所以我的手机上有很多PDF文件。之后,我可以与我的应用共享这些pdf,并且可以在其中看到它们。但这并不是我想要的。假设有一个ABC应用程序,其中包含许多pdf。我想打开这些pdf文件并直接与我的Xamarin App共享而不存储它们。我可以举一个例子来解释:您有一个PDF,您想与您的朋友分享。您打开该Pdf,然后单击“共享”按钮。之后,您将选择要使用的应用程序,例如Whatsapp,E-Mail,Skype,Discord等。因此,最后,您可以将pdf直接发送到另一个没有存储的应用程序。
Intent intent = new Intent(Application.Context, typeof(MainActivity));
var action = Intent.Action;
var type = Intent.Type;
if (Android.Content.Intent.ActionSend.Equals(action) &&
(type?.Equals("text/plain") ?? false))
{
var path = Intent.GetStringExtra(Android.Content.Intent.ExtraText);
Console.WriteLine(path);
}
if (Android.Content.Intent.ActionSend.Equals(action) && (type?.Equals("application/pdf") ?? false))
{
var uri = (Android.Net.Uri)Intent.GetParcelableExtra(Android.Content.Intent.ExtraStream);
Context context = Android.App.Application.Context;
var fullPath = GetFilePath(uri);
Navigate(fullPath);
}
private string GetFilePath(Android.Net.Uri uri)
{
string[] proj = { MediaStore.Images.ImageColumns.Data };
var cursor = ContentResolver.Query(uri, proj, null, null, null);
var colIndex = cursor.GetColumnIndex(MediaStore.Images.ImageColumns.Data);
cursor.MoveToFirst();
return cursor.GetString(colIndex);
}
当我将pdf分享到我的应用程序时,这是错误:
未处理的异常:Java.Lang.IllegalStateException:无法从CursorWindow读取行0,col -1。在从游标访问数据之前,请确保游标已正确初始化。
答案 0 :(得分:0)
我已经从此网站更改了我的代码:
https://codemilltech.com/sending-files-to-a-xamarin-forms-app-part-2-android/
,并且有效。希望它可以帮助某人。
if (Android.Content.Intent.ActionSend.Equals(action) && (type?.Equals("application/pdf") ?? false))
{
// This is just an example of the data stored in the extras
var uriFromExtras = Intent.GetParcelableExtra(Intent.ExtraStream) as Android.Net.Uri;
var subject = Intent.GetStringExtra(Intent.ExtraSubject);
// Get the info from ClipData
var pdf = Intent.ClipData.GetItemAt(0);
// Open a stream from the URI
var pdfStream = ContentResolver.OpenInputStream(pdf.Uri);
// Save it over
var memOfPdf = new System.IO.MemoryStream();
pdfStream.CopyTo(memOfPdf);
var docsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
var filePath = System.IO.Path.Combine(docsPath, "temp.pdf");
System.IO.File.WriteAllBytes(filePath, memOfPdf.ToArray());
Navigate(filePath);
}