Xamarin Android通过自定义渲染器的社交媒体分享链接/文本

Dev*_*evC 2 xamarin.android xamarin xamarin.forms

我不想通过自定义渲染器的社交媒体分享链接

public class CustomActions : ICustomActions
    {
        Context context = Android.App.Application.Context;

        public void ShareThisLink()
        {
            Intent sharingInt = new Intent(Android.Content.Intent.ActionSend);
            sharingInt.SetType("text/plain");
            string shareBody = "https://www.google.com";
            sharingInt.PutExtra(Android.Content.Intent.ExtraSubject, "Subject");
            sharingInt.PutExtra(Android.Content.Intent.ExtraText, shareBody);
            context.StartActivity(Intent.CreateChooser(sharingInt, "Share via"));
        }

    }
Run Code Online (Sandbox Code Playgroud)

发生此错误

Android.Util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
Run Code Online (Sandbox Code Playgroud)

即使我添加下面的代码我仍然得到相同的错误

 sharingInt.AddFlags(ActivityFlags.NewTask);
Run Code Online (Sandbox Code Playgroud)

Mar*_*und 7

问题是Intent.CreateChooser创造另一个Intent.你想要做的是在这个新意图上设置标志:

public void ShareThisLink()
{
    Intent sharingInt = new Intent(Android.Content.Intent.ActionSend);
    sharingInt.SetType("text/plain");
    string shareBody = "https://www.google.com";
    sharingInt.PutExtra(Android.Content.Intent.ExtraSubject, "Subject");
    sharingInt.PutExtra(Android.Content.Intent.ExtraText, shareBody);
    var intent = Intent.CreateChooser(sharingInt, "Share via");
    intent.AddFlags(ActivityFlags.NewTask);
    context.StartActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)

或者为了避免执行此操作,您可以缓存MainActivity实例Xamarin.Forms使用:

public MainActivity
{
   public static MainActivity Instance {get;private set;}

   protected override void OnCreate(Bundle bundle)
   {
       Instance = this;
       ...
   }
}
Run Code Online (Sandbox Code Playgroud)

然后在代码中使用Instanceas Context而不是Application.Context