Start an Android activity in Xamarin Forms?

自闭症网瘾萝莉.ら 提交于 2019-12-18 05:06:25

问题


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.ActionView);

            intent.SetDataAndType(Uri.Parse("http://sample/url.pdf"), "application/pdf");
            intent.SetFlags(ActivityFlags.ClearTop);
            Android.Content.Context.StartActivity(intent);

I have used this code in a Native project, so I know that it works within an Android activity. For Xamarin Forms, is there a way for me to start an Android activity from a content page, and vice versa?


回答1:


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();
    }



回答2:


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.



来源:https://stackoverflow.com/questions/44338217/start-an-android-activity-in-xamarin-forms

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!