我希望我的应用程序成为 PDF 的查看器并发送目标,但不希望它每次都创建新实例。如何在我的 ? 中捕获视图意图操作MainActivity
?我试过OnNewIntent()
但它没有被调用。只有当应用程序尚未运行时,我才会在OnCreate()
. 我错过了什么?
[Activity (Theme = "@style/MainTheme", Label = "MyPdfViewer", Icon = "@drawable/icon", /*MainLauncher = true, --> SplashActivity is now the MainLauncher */LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
[IntentFilter(new[] { Intent.ActionSend }, Categories = new[] { Intent.CategoryDefault }, DataMimeType = @"application/pdf")]
[IntentFilter(new[] { Intent.ActionView }, Categories = new[] { Intent.CategoryDefault }, DataMimeType = @"application/pdf")]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
LoadApplication (new App ());
// handle clipboard data "send to" or "view document" actions
if (Intent.Type == "application/pdf")
{
HandleSendOrViewAction();
}
}
protected virtual void OnNewIntent()
{
var data = this.Intent.Data; // <-- never called
// do similar thing like in HandleSendOrViewAction()
}
private bool HandleSendOrViewAction()
{
// Get the info from ClipData
var pdf = Intent.ClipData.GetItemAt(0);
// Open a stream from the URI
byte[] bytes;
Stream inputStream;
if (Intent.Action == Intent.ActionSend)
inputStream = ContentResolver.OpenInputStream(pdf.Uri);
else if (Intent.Action == Intent.ActionView)
inputStream = ContentResolver.OpenInputStream(Intent.Data);
else
return false;
using (StreamReader sr = new StreamReader(inputStream))
{
MemoryStream ms = new MemoryStream();
inputStream.CopyTo(ms);
bytes = ms.ToArray();
}
Services.PdfReceiver.Base64Data = Convert.ToBase64String(bytes);
return true;
}