1

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?

Saamer
  • 4,687
  • 1
  • 13
  • 55

3 Answers3

1

As you can see in some of the examples provided by Xamarin on Github, you can just use the "Context" of your app as follows inside your Pay_Droid class as follows:

Context _context;

public Pay_Droid(Context context) : base(context)
{
    _context = context;
}

public void Pay()
{
    ...
    AutoResolveHelper.ResolveTask(paymentsClient.LoadPaymentData(request), _context, LOAD_PAYMENT_DATA_REQUEST_CODE);
    ...
}
Saamer
  • 4,687
  • 1
  • 13
  • 55
1

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);
...
}
Cherry Bu - MSFT
  • 10,160
  • 1
  • 10
  • 16
  • Have you tested to see if this causes a memory leak? In native Android (Java), maintaining a static reference to a context will cause a memory leak. – Mira_Cole May 05 '21 at 18:12
0

For Xamarin, you can use:

public void Pay() => AutoResolveHelper.ResolveTask(
                    PaymentsClient.LoadPaymentData(request),
                    Platform.CurrentActivity,
                    LOAD_PAYMENT_DATA_REQUEST_CODE);