public void StartDiscovery(string serviceId, TimeSpan?advertisingDuration,
                                   IDiscoveryListener listener)
        {
            Misc.CheckNotNull(serviceId, "serviceId");
            Misc.CheckNotNull(listener, "listener");

            var listenerOnGameThread = new OnGameThreadDiscoveryListener(listener);

            if (advertisingDuration.HasValue && advertisingDuration.Value.Ticks < 0)
            {
                throw new InvalidOperationException("advertisingDuration must be positive");
            }

            using (var endpointDiscoveryCallback = new AndroidJavaObject(
                       "com.google.games.bridge.EndpointDiscoveryCallbackProxy",
                       new EndpointDiscoveryCallback(listenerOnGameThread)))
                using (var discoveryOptions = CreateDiscoveryOptions())
                    using (var task = mClient.Call <AndroidJavaObject>("startDiscovery", serviceId, endpointDiscoveryCallback,
                                                                       discoveryOptions))
                    {
                        AndroidTaskUtils.AddOnSuccessListener <AndroidJavaObject>(
                            task,
                            v => NearbyHelperObject.StartDiscoveryTimer(advertisingDuration)
                            );
                    }
        }