Search code examples
xamarinxamarin.formsxamarin.androidgoogle-pay

In Xamarin.Android need use Activity by call from Xamarin.Forms using DependencyService


I implement by manual https://developers.google.com/pay/api/android/guides/tutorial in Xamarin.Forms + Xamarin.Android. I call in Xamarin.Forms:

DependencyService.Get<IPay>().Pay();

In Xamarin.Android i implement

public class Pay_Droid : IPay
{

public void Pay()
{
...
AutoResolveHelper.ResolveTask(
                paymentsClient.LoadPaymentData(request),
                this,
                LOAD_PAYMENT_DATA_REQUEST_CODE);
...
}

}

but have problem in "this" - need use activity. How to implement?


Solution

  • Firstly, you can create public static MainActivity in MainActivity class, then assign current MainActivity to macvivity in MainActivity OnCreate() method:

    public static MainActivity macvivity;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;
    
            base.OnCreate(savedInstanceState);
    
    
            macvivity = this;
    
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
        }
    

    Finally, you can activity by MainActivity.macvivity

    public void Pay()
    {
    ...
    AutoResolveHelper.ResolveTask(
                paymentsClient.LoadPaymentData(request),
                MainActivity.macvivity,
                LOAD_PAYMENT_DATA_REQUEST_CODE);
    ...
    }