Start an Android activity in Xamarin Forms?

后端 未结 3 1368
情书的邮戳
情书的邮戳 2020-12-18 03:51

I am trying to view a hosted PDF file with the default Android pdf viewer in my App with the following code

            var intent = new Intent(Intent.Action         


        
相关标签:
3条回答
  • 2020-12-18 04:16

    Forms.Context is obsolete now. The workaround is to instantiate the current context in Main activity class of Android project as under:

    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 
    {
      public static Xamarin.Forms.Platform.Android.FormsAppCompatActivity Instance { get; private set; }
    
      protected override void OnCreate(Bundle bundle)
      {
            base.OnCreate(savedInstanceState);
    
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
    
            LoadApplication(new App());
            Instance = this;
      }
    

    And retrieve the local context in your NativePages StartAc() method as under:

    public void StartAc()
        {
          var intent = new Intent(MainActivity.Instance, typeof(YourActivity));
          MainActivity.Instance.StartActivity(intent);
        }
    
    0 讨论(0)
  • 2020-12-18 04:18

    You can use DependencyService to implement this function:

    INativePages in PCL:

     public interface INativePages
    {
        void StartActivityInAndroid();
    }
    

    Implement the interface in Xamarin.Android:

    [assembly: Xamarin.Forms.Dependency(typeof(NativePages))]
    namespace PivotView.Droid
    {
        public class NativePages : INativePages
        {
            public NativePages()
            {
            }
    
            public void StartAc()
            {
                var intent = new Intent(Forms.Context, typeof(YourActivity));
                Forms.Context.StartActivity(intent);
            }
    
        }
    }
    

    Start an Android Activity in PCL :

        private void Button_Clicked(object sender, EventArgs e)
        {
            Xamarin.Forms.DependencyService.Register<INativePages>();
            DependencyService.Get<INativePages>().StartAc();
        }
    
    0 讨论(0)
  • 2020-12-18 04:40

    Create an class for this function in an android project:

    public class PdfLauncher : IPdfLauncher
    {
        public void LaunchPdf(string url)
        {
            //implementation
        }
    }
    

    Create an interface in a portable project

    public interface IPdfLauncher
    {
        void LaunchPdf(string url);
    }
    

    Add a property to your viewmodel so you can call the function from your portable project

    public IPdfLauncher PdfLauncher {get;set;}
    

    Add the interface to your viewmodel constructor and pass in an instance that you create in your android main activity. You can now call android code from your xforms commands and, if you ever add iOS or UWP you can simply implement that interface in those projects and pass them in at runtime. I use an injection framework from MVVM to automate creating these platform specific implementations, and I'd recommend you look into it if you find yourself doing these often.

    0 讨论(0)
提交回复
热议问题