Beispiel #1
0
        public WifiDirectManager()
        {
            _WifiP2pActonListener  = new Receiver(this);
            _DiscoverPeersListener = new WifiP2pActionListener(this);

            _DroidWifiP2pManager = (WifiP2pManager)Application.Context.GetSystemService(Context.WifiP2pService);
            _Channel             = _DroidWifiP2pManager.Initialize(Application.Context, Application.Context.MainLooper, null);

            /*
             * IntentFilter startFilter = new IntentFilter(BluetoothAdapter.ActionDiscoveryStarted);
             * IntentFilter foundFilter = new IntentFilter(BluetoothDevice.ActionFound);
             * IntentFilter finshFilter = new IntentFilter(BluetoothAdapter.ActionDiscoveryFinished);
             *
             * Application.Context.RegisterReceiver(_DiscoveryStartedReceiver, startFilter);
             * Application.Context.RegisterReceiver(_DevicesFoundReceiver, foundFilter);
             * Application.Context.RegisterReceiver(_DiscoveryFinishedReceiver, finshFilter);
             */

            IntentFilter connectionChangedFilter = new IntentFilter(WifiP2pManager.WifiP2pConnectionChangedAction);
            IntentFilter peersChangedFilter      = new IntentFilter(WifiP2pManager.WifiP2pPeersChangedAction);
            IntentFilter stateChangedFilter      = new IntentFilter(WifiP2pManager.WifiP2pStateChangedAction);
            IntentFilter thisDeviceChangedFilter = new IntentFilter(WifiP2pManager.WifiP2pThisDeviceChangedAction);

            Application.Context.RegisterReceiver(_WifiP2pActonListener, stateChangedFilter);
            Application.Context.RegisterReceiver(_WifiP2pActonListener, connectionChangedFilter);
            Application.Context.RegisterReceiver(_WifiP2pActonListener, peersChangedFilter);

            //Application.Context.RegisterReceiver()
        }
            public async Task <ConnectionEstablishState> ConnectAsync()
            {
                await Task.Run(() =>
                {
                    WifiP2pConfig config = new WifiP2pConfig();
                    config.DeviceAddress = (WifiDirectDevice as WifiDirectDevice).Address;
                    WifiP2pManager droidWifiP2pManager = _WifiDirectManager._DroidWifiP2pManager;
                    droidWifiP2pManager.Connect(_WifiDirectManager._Channel, config, _ConnectStateListener);
                    while (!_ConnectingSucceeded)
                    {
                        if (_ReconnectMark)
                        {
                            _ReconnectMark = false;
                            droidWifiP2pManager.Connect(_WifiDirectManager._Channel, config, _ConnectStateListener);
                        }
                    }
                    WifiP2pActionListener connectionInfoListener = new WifiP2pActionListener(_WifiDirectManager);
                    _WifiDirectManager._DroidWifiP2pManager.RequestConnectionInfo(_WifiDirectManager._Channel, connectionInfoListener);
                    while (_WifiDirectManager._LatestWifiP2pInfo == null)
                    {
                        System.Diagnostics.Debug.WriteLine("HERE2");
                    }
                    WifiP2pInfo preInfo = null;
                    while (_WifiDirectManager._LatestWifiP2pInfo.GroupOwnerAddress == null)
                    {
                        if (preInfo != _WifiDirectManager._LatestWifiP2pInfo)
                        {
                            preInfo = _WifiDirectManager._LatestWifiP2pInfo;
                            _WifiDirectManager._DroidWifiP2pManager.RequestConnectionInfo(_WifiDirectManager._Channel, connectionInfoListener);
                            System.Diagnostics.Debug.WriteLine("CHANGE");
                        }
                        System.Diagnostics.Debug.WriteLine("HERE3");
                    }
                    if (_ConnectingSucceeded)
                    {
                        ConnectionEstablishState = ConnectionEstablishState.Succeeded;
                    }
                    OnConnectionEstalblishResult?.Invoke(this, ConnectionEstablishState);
                });

                try
                {
                    System.Diagnostics.Debug.WriteLine("Connect Succeed " + _WifiDirectManager._LatestWifiP2pInfo.GroupOwnerAddress.HostAddress);
                }
                catch (Exception)
                {
                    var f**k = _WifiDirectManager._LatestWifiP2pInfo;
                }


                return(ConnectionEstablishState);
            }