Hi Dan

I too am having a similar problem. I've converted all the java files to C#
and am now testing.

People on this forum can correct me here, but I believe you are
oversimplifying the casting like I initially did. I'm using license checking
code that I got back in January and a stub was created. Your
OnServiceConnected() should look like below:


public void OnServiceConnected(ComponentName name, IBinder service)
{
  mService = BillingServiceStub.AsInterface(service);
}


The actual proxy code will be similar to below. I say similar because my
SendBillingRequest() with the reply variable is always null.

I learning heaps about Java here.

If you can find out where I went wrong I would love to learn. Below is the
code and proxy class for the IMarketBillingService (it's rough as I'm more
interested in getting the thing to work):



using Android.OS;

namespace com.android.vending.billing
{
        internal interface IMarketBillingService : IInterface
        {
                /// <summary>
                /// Given the arguments in bundle form, returns a bundle for 
results.
</summary>
                Bundle SendBillingRequest(Bundle bundle);
        }

    public abstract class BillingServiceStub : Binder, IMarketBillingService
    {
        private const string DESCRIPTOR =
"com.android.vending.billing.IMarketBillingService";

        /** Construct the stub at attach it to the interface. */
        public BillingServiceStub()
        {
            this.AttachInterface(this, DESCRIPTOR);
        }
        /**
         * Cast an IBinder object into an IMarketBillingService interface,
         * generating a proxy if needed.
         */
        internal static IMarketBillingService AsInterface(IBinder obj)
        {
            if ((obj == null))
            {
                return null;
            }
            IInterface iin =
(IInterface)obj.QueryLocalInterface(DESCRIPTOR);
            if (((iin != null) && (iin is BillingServiceStub)))
            {
                return ((BillingServiceStub)iin);
            }

            return new BillingServiceStub.Proxy(obj);
        }

        public IBinder AsBinder()
        {
            return this;
        }

        protected override bool OnTransact(int code, Parcel data, Parcel
reply, int flags)
        {
            switch (code)
            {
                case Binder.InterfaceConsts.InterfaceTransaction:
                    {
                        reply.WriteString(DESCRIPTOR);
                        return true;
                    }
                case TRANSACTION_checkBilling:
                    {
                        data.EnforceInterface(DESCRIPTOR);
                        Bundle _arg0;
                        _arg0 = data.ReadBundle();
                        this.SendBillingRequest(_arg0);
                        return true;
                    }
            }

            return base.OnTransact(code, data, reply, flags);
        }

        const int TRANSACTION_checkBilling =
(Binder.InterfaceConsts.FirstCallTransaction + 0);
        public abstract Bundle SendBillingRequest(Bundle bundle);

        private class Proxy : Java.Lang.Object, IMarketBillingService
        {
            private IBinder mRemote;
            public Proxy(IBinder remote)
            {
                mRemote = remote;
            }
            public IBinder AsBinder()
            {
                return mRemote;
            }
            public string GetInterfaceDescriptor()
            {
                return DESCRIPTOR;
            }

            public Bundle SendBillingRequest(Bundle bundle)
            {
                Parcel _data = Parcel.Obtain();
                Parcel reply = null;
                bool bRes = false;
                try
                {
                    _data.WriteInterfaceToken(DESCRIPTOR);
                    _data.WriteBundle(bundle);
                    bRes =
mRemote.Transact(BillingServiceStub.TRANSACTION_checkBilling, _data, reply,
TransactionFlags.Oneway);
                }
                finally
                {
                    _data.Recycle();
                }

                return reply.ReadBundle();
            }
        }
    }
}






--
View this message in context: 
http://mono-for-android.1047100.n5.nabble.com/Binding-Services-casting-interface-on-service-connection-fails-tp5711549p5711551.html
Sent from the Mono for Android mailing list archive at Nabble.com.
_______________________________________________
Monodroid mailing list
Monodroid@lists.ximian.com

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid

Reply via email to