2013-09-02 12 views
7

Najpierw, oto tło:C# Czytaj Windows Mobile Broadband właściwości połączenia

Mamy aplikacji Windows Forms (napisany w języku C#, .NET Framework 3.5), obecnie działa na pełnych Windows 7 tabletek, które posiadają moduł 3G wbudowany, który służy do przesyłania danych. Połączenie danych jest skonfigurowane jako normalne mobilne połączenie szerokopasmowe w systemie Windows (więc Windows zarządza samą połączeniem), a połączenie pojawia się w Panelu sterowania> Sieć i Internet> Połączenia sieciowe i działa poprawnie - aplikacja może komunikować się przez internet z naszym serwisem internetowym. Przenosimy się na inne urządzenie (prawdopodobnie na cały tablet z systemem Windows 8) w pewnym momencie w przyszłości.

Teraz potrzebuję przeczytać stan połączenia tego mobilnego połączenia szerokopasmowego; tj. uzyskać siłę sygnału i nazwę operatora (np. Vodafone UK). Znalazłem sposób, aby to zrobić za pomocą interfejsu API Mobile Broadband API pakietu SDK systemu Windows 7 (zobacz here i here), jednak wydaje się, że jest to specyficzne dla systemu operacyjnego, ponieważ nie działa w systemie Windows 8 - lub przynajmniej nie z urządzenie, które mam tutaj.

Czy istnieje ogólny sposób odczytu właściwości połączenia mobilnego Internetu szerokopasmowego za pomocą architektury .NET?

Alternatywnie, czy ktoś wie o zestawie SDK systemu Windows 8, który zawiera mobilne API szerokopasmowe, takie jak Windows 7, którego aktualnie używam?

Z góry dziękuję.

Aktualizacja - Mam już działa na wiele różnych urządzeń Win 7/Win 8 teraz. Nawet urządzenie Lenovo działa poprawnie. Będę wysyłać przykładowy kod dla głównych bitów (czytanie stanu połączenia, konfigurowanie połączenia, sprawdzanie stanu karty SIM) jako odpowiedzi; kod jest trochę zbyt długi, aby przejść do pytania, denerwująco.

+1

Dodałem większość kodu I skończył przy użyciu do testów jako odpowiedzi poniżej. Twój własny kod prawdopodobnie nie będzie zaśmiecony listami dyskusyjnymi, ale mam nadzieję, że inne przykłady będą przydatne. –

+0

Witam, jak to działa w systemie Windows 8? mbnInfMgrInterface = null, gdy próbuję tego samego w systemie Windows 8 ... czy potrzebuję instalacji dodatkowej lub czy plik Interop.MbnApi.dll jest wystarczający? – user1841243

+2

Wszystkie wypróbowane urządzenia Win 8 wróciły z IMbnInterfaceManager - chociaż nie działał na niczym bez mobilnego adaptera szerokopasmowego (np. Mojego komputera stacjonarnego). Jakie to urządzenie i czy adapter działa po ręcznym skonfigurowaniu w systemie Windows? –

Odpowiedz

2

Interfejs API mobilnego systemu szerokopasmowego jest również dostępny na pulpicie systemu Windows 8.

Jeśli używasz Windows 8 Metro/RT/jakakolwiek nazwa, potrzebujesz these WindowsRT APIs (Windows.Connectivity.NetworkInformation itp.).

+0

Udało mi się teraz uruchomić interfejs Mobile Broadband API na tablecie Win8. Z jakiegoś powodu nie działa ona na wszystkich komputerach Win8, wydaje mi się, że jest tak ze względu na zabawny sposób, w jaki niektóre komputery mają ustawione mobilne połączenie transmisji danych (np. Lenovo Thinkpad Tablet 2, który ma mobilny modem szerokopasmowy, ale jest skonfigurowany do emulować adapter Ethernet w systemie Windows, aby interfejs Mobile Broadband API go nie podnosił). –

+0

Czy istnieje przypadek ciągłego połączenia IP dla tego adaptera Ethernet, nawet gdy nie ma połączenia przenośnego typu backhaul? –

+0

Znalazłem w końcu, że nie miało to nic wspólnego z dziwnym adapterem pseudo-ethernetowym. To był tylko SDK zachowujący się nieco inaczej z różnymi mobilnymi adapterami szerokopasmowymi. Poniższy kod działa na 4 różnych urządzeniach Win 7, Win 8 i 8.1, które wypróbowałem. Dziękujemy za pomoc! –

3

Odczyt stanu połączenia:

try 
     { 
      MbnInterfaceManager mbnInfMgr = new MbnInterfaceManager(); 
      IMbnInterfaceManager mbnInfMgrInterface = mbnInfMgr as IMbnInterfaceManager; 
      if (mbnInfMgrInterface != null) 
      { 
       IMbnInterface[] mobileInterfaces = mbnInfMgrInterface.GetInterfaces() as IMbnInterface[]; 
       if (mobileInterfaces != null && mobileInterfaces.Length > 0) 
       { 
        // Use the first interface, as there should only be one mobile data adapter 
        IMbnSignal signalDetails = mobileInterfaces[0] as IMbnSignal; 

        Int32.TryParse(signalDetails.GetSignalStrength().ToString(), out PhoneSignal); 
        PhoneSignal = Convert.ToInt32(((float)PhoneSignal/16) * 100); 

        MBN_PROVIDER provider = mobileInterfaces[0].GetHomeProvider(); 
        PhoneNetwork = provider.providerName.ToString(); 

        if (String.IsNullOrEmpty(SIMNumber)) 
        { 
         try 
         { 
          IMbnSubscriberInformation subInfo = mobileInterfaces[0].GetSubscriberInformation(); 

          if (subInfo != null) 
          { 
           SIMNumber = subInfo.SimIccID; 
          } 
          else 
          { 
           SIMNumber = "Unable to read SIM info"; 
          } 
         } 
         catch (Exception) 
         { 
          SIMNumber = "Unable to read SIM info"; 
         } 
        } 

        // Check whether the connection is active 
        IMbnConnection connection = mobileInterfaces[0].GetConnection(); 

        if (connection != null) 
        { 
         MBN_ACTIVATION_STATE state; 
         string profileName = String.Empty; 
         connection.GetConnectionState(out state, out profileName); 

         Connected = (state == MBN_ACTIVATION_STATE.MBN_ACTIVATION_STATE_ACTIVATED); 
        } 
        else 
        { 
         MessageBox.Show("Connection not found."); 
        } 
       } 
       else 
       { 
        MessageBox.Show("No mobile interfaces found."); 
       } 
      } 
      else 
      { 
       MessageBox.Show("mbnInfMgrInterface is null."); 
      } 
     } 
     catch (Exception ex) 
     { 
      if (ex.Message.Contains("SIM is not inserted.")) 
      { 
       SIMNumber = "No SIM inserted."; 
      } 
      else 
      { 
       MessageBox.Show("LoginForm.DataConnection GetWindowsMobileDataStatus " + ex.Message); 
      } 
      PhoneSignal = 0; 
      PhoneNetwork = "Unknown"; 
     } 
2

Sprawdzanie SIM jest włożona i pracy/aktywowane:

try 
     { 
      MbnInterfaceManager mbnInfMgr = new MbnInterfaceManager(); 
      IMbnInterfaceManager mbnInfMgrInterface = mbnInfMgr as IMbnInterfaceManager; 
      if (mbnInfMgrInterface != null) 
      { 
       IMbnInterface[] mobileInterfaces = mbnInfMgrInterface.GetInterfaces() as IMbnInterface[]; 
       if (mobileInterfaces != null && mobileInterfaces.Length > 0) 
       { 
        try 
        { 
         MBN_READY_STATE readyState = mobileInterfaces[0].GetReadyState(); 

         switch (readyState) 
         { 
          case MBN_READY_STATE.MBN_READY_STATE_BAD_SIM: 
           MessageBox.Show("The SIM is invalid (PIN Unblock Key retrials have exceeded the limit)."); 
           break; 
          case MBN_READY_STATE.MBN_READY_STATE_DEVICE_BLOCKED: 
           MessageBox.Show("The device is blocked by a PIN or password which is preventing the device from initializing and registering onto the network."); 
           break; 
          case MBN_READY_STATE.MBN_READY_STATE_DEVICE_LOCKED: 
           MessageBox.Show("The device is locked by a PIN or password which is preventing the device from initializing and registering onto the network."); 
           break; 
          case MBN_READY_STATE.MBN_READY_STATE_FAILURE: 
           MessageBox.Show("General device failure."); 
           break; 
          case MBN_READY_STATE.MBN_READY_STATE_INITIALIZED: 
           try 
           { 
            IMbnSubscriberInformation subInfo = mobileInterfaces[0].GetSubscriberInformation(); 

            if (subInfo != null) 
            { 
             SIMNumber = subInfo.SimIccID; 
            } 
            else 
            { 
             SIMNumber = "Unable to read SIM info"; 
            } 
           } 
           catch (Exception) 
           { 
            SIMNumber = "Unable to read SIM info"; 
           } 

           IMbnRegistration registration = mobileInterfaces[0] as IMbnRegistration; 
           if (registration != null) 
           { 
            try 
            { 
             MBN_REGISTER_STATE regState = registration.GetRegisterState(); 

             switch (regState) 
             { 
              case MBN_REGISTER_STATE.MBN_REGISTER_STATE_DENIED: 
               // SIM Inactive 
               simInactive = true; 
               MessageBox.Show("The device was denied registration. The most likely cause of this error is an Inactive SIM."); 
               break; 
              case MBN_REGISTER_STATE.MBN_REGISTER_STATE_DEREGISTERED: 
               // Do nothing - this is returned before the device has tried to register 
               break; 
              case MBN_REGISTER_STATE.MBN_REGISTER_STATE_HOME: 
               // Do nothing 
               break; 
              case MBN_REGISTER_STATE.MBN_REGISTER_STATE_NONE: 
               MessageBox.Show("The device registration state is unknown. This state may be set upon failure of registration mode change requests."); 
               break; 
              case MBN_REGISTER_STATE.MBN_REGISTER_STATE_PARTNER: 
               // Do nothing 
               break; 
              case MBN_REGISTER_STATE.MBN_REGISTER_STATE_ROAMING: 
               // Do nothing 
               break; 
              case MBN_REGISTER_STATE.MBN_REGISTER_STATE_SEARCHING: 
               // Do nothing 
               break; 
              default: 
               MessageBox.Show("GetRegisterState returned an unexpected state: " + regState.ToString()); 
               break; 
             } 
            } 
            catch (Exception ex) 
            { 
             MessageBox.Show("GetRegisterState Error: " + ex.Message); 
            } 
           } 
           break; 
          case MBN_READY_STATE.MBN_READY_STATE_NOT_ACTIVATED: 
           MessageBox.Show("The subscription is not activated."); 
           break; 
          case MBN_READY_STATE.MBN_READY_STATE_OFF: 
           MessageBox.Show("The mobile broadband device stack is off."); 
           break; 
          case MBN_READY_STATE.MBN_READY_STATE_SIM_NOT_INSERTED: 
           MessageBox.Show("The SIM is not inserted."); 
           break; 
          default: 
           MessageBox.Show("GetReadyState returned an unexpected state: " + readyState.ToString()); 
           break; 
         } 
        } 
        catch (Exception ex) 
        { 
         MessageBox.Show("GetReadyState Error: " + ex.Message); 
        } 
       } 
       else 
       { 
        MessageBox.Show("No mobileInterfaces found."); 
       } 
      } 
      else 
      { 
       MessageBox.Show("mbnInfMgrInterface is null."); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error: " + ex.Message); 
     } 
4

Konfigurowanie połączenia programowo (trzeba szczegóły APN):

try 
     { 
      MbnInterfaceManager mbnInfMgr = new MbnInterfaceManager(); 
      IMbnInterfaceManager mbnInfMgrInterface = mbnInfMgr as IMbnInterfaceManager; 
      if (mbnInfMgrInterface != null) 
      { 
       IMbnInterface[] mobileInterfaces = mbnInfMgrInterface.GetInterfaces() as IMbnInterface[]; 
       if (mobileInterfaces != null && mobileInterfaces.Length > 0) 
       { 
        // Just use the first interface 
        IMbnSubscriberInformation subInfo = mobileInterfaces[0].GetSubscriberInformation(); 

        if (subInfo != null) 
        { 
         SIMNumber = subInfo.SimIccID; 
         // Get the connection profile 
         MbnConnectionProfileManager mbnConnProfileMgr = new MbnConnectionProfileManager(); 
         IMbnConnectionProfileManager mbnConnProfileMgrInterface = mbnConnProfileMgr as IMbnConnectionProfileManager; 
         if (mbnConnProfileMgrInterface != null) 
         { 
          bool connProfileFound = false; 
          string profileName = String.Empty; 

          try 
          { 
           IMbnConnectionProfile[] mbnConnProfileInterfaces = mbnConnProfileMgrInterface.GetConnectionProfiles(mobileInterfaces[0]) as IMbnConnectionProfile[]; 

           foreach (IMbnConnectionProfile profile in mbnConnProfileInterfaces) 
           { 
            string xmlData = profile.GetProfileXmlData(); 

            if (xmlData.Contains("<SimIccID>" + SIMNumber + "</SimIccID>")) 
            { 
             connProfileFound = true; 
             bool updateRequired = false; 

             // Check if the profile is set to auto connect 
             XmlDocument xdoc = new XmlDocument(); 
             xdoc.LoadXml(xmlData); 

             profileName = xdoc["MBNProfile"]["Name"].InnerText; 

             if (xdoc["MBNProfile"]["ConnectionMode"].InnerText != "auto") 
             { 
              xdoc["MBNProfile"]["ConnectionMode"].InnerText = "auto"; 
              updateRequired = true; 
             } 

             // Check the APN settings 
             if (xdoc["MBNProfile"]["Context"] == null) 
             { 
              XmlElement context = (XmlElement)xdoc["MBNProfile"].AppendChild(xdoc.CreateElement("Context", xdoc["MBNProfile"].NamespaceURI)); 
              context.AppendChild(xdoc.CreateElement("AccessString", xdoc["MBNProfile"].NamespaceURI)); 
              context.AppendChild(xdoc.CreateElement("Compression", xdoc["MBNProfile"].NamespaceURI)); 
              context.AppendChild(xdoc.CreateElement("AuthProtocol", xdoc["MBNProfile"].NamespaceURI)); 
              updateRequired = true; 
             } 

             if (xdoc["MBNProfile"]["Context"]["AccessString"].InnerText != APNAccessString) 
             { 
              xdoc["MBNProfile"]["Context"]["AccessString"].InnerText = APNAccessString; 
              updateRequired = true; 
             } 
             if (xdoc["MBNProfile"]["Context"]["Compression"].InnerText != APNCompression) 
             { 
              xdoc["MBNProfile"]["Context"]["Compression"].InnerText = APNCompression; 
              updateRequired = true; 
             } 
             if (xdoc["MBNProfile"]["Context"]["AuthProtocol"].InnerText != APNAuthProtocol) 
             { 
              xdoc["MBNProfile"]["Context"]["AuthProtocol"].InnerText = APNAuthProtocol; 
              updateRequired = true; 
             } 

             if (xdoc["MBNProfile"]["Context"]["UserLogonCred"] == null && !String.IsNullOrEmpty(APNUsername)) 
             { 
              XmlElement userLogonCred = (XmlElement)xdoc["MBNProfile"]["Context"].InsertAfter(xdoc.CreateElement("UserLogonCred", xdoc["MBNProfile"].NamespaceURI), xdoc["MBNProfile"]["Context"]["AccessString"]); 
              userLogonCred.AppendChild(xdoc.CreateElement("UserName", xdoc["MBNProfile"].NamespaceURI)); 
              userLogonCred.AppendChild(xdoc.CreateElement("Password", xdoc["MBNProfile"].NamespaceURI)); 
              updateRequired = true; 
             } 

             if (xdoc["MBNProfile"]["Context"]["UserLogonCred"] != null && xdoc["MBNProfile"]["Context"]["UserLogonCred"]["UserName"].InnerText != APNUsername) 
             { 
              xdoc["MBNProfile"]["Context"]["UserLogonCred"]["UserName"].InnerText = APNUsername; 
              updateRequired = true; 
             } 

             if (xdoc["MBNProfile"]["Context"]["UserLogonCred"] != null && xdoc["MBNProfile"]["Context"]["UserLogonCred"]["Password"] == null && !String.IsNullOrEmpty(APNUsername)) 
             { 
              xdoc["MBNProfile"]["Context"]["UserLogonCred"].AppendChild(xdoc.CreateElement("Password", xdoc["MBNProfile"].NamespaceURI)); 
             } 

             if (xdoc["MBNProfile"]["Context"]["UserLogonCred"] != null && xdoc["MBNProfile"]["Context"]["UserLogonCred"]["Password"].InnerText != APNPassword) 
             { 
              xdoc["MBNProfile"]["Context"]["UserLogonCred"]["Password"].InnerText = APNPassword; 
              updateRequired = true; 
             } 

             if (updateRequired) 
             { 
              // Update the connection profile 
              profile.UpdateProfile(xdoc.OuterXml); 
             } 
            } 
           } 
          } 
          catch (Exception ex) 
          { 
           if (!ex.Message.Contains("Element not found")) 
           { 
            throw ex; 
           } 
          } 

          if (!connProfileFound) 
          { 
           // Create the connection profile 
           XmlDocument xdoc = new XmlDocument(); 
           xdoc.AppendChild(xdoc.CreateXmlDeclaration("1.0", "utf-8", "yes")); 
           XmlElement mbnProfile = (XmlElement)xdoc.AppendChild(xdoc.CreateElement("MBNProfile", "http://www.microsoft.com/networking/WWAN/profile/v1")); 
           mbnProfile.AppendChild(xdoc.CreateElement("Name", xdoc["MBNProfile"].NamespaceURI)).InnerText = SIMNumber; 
           mbnProfile.AppendChild(xdoc.CreateElement("IsDefault", xdoc["MBNProfile"].NamespaceURI)).InnerText = "true"; 
           mbnProfile.AppendChild(xdoc.CreateElement("ProfileCreationType", xdoc["MBNProfile"].NamespaceURI)).InnerText = "DeviceProvisioned"; 
           mbnProfile.AppendChild(xdoc.CreateElement("SubscriberID", xdoc["MBNProfile"].NamespaceURI)).InnerText = subInfo.SubscriberID; 
           mbnProfile.AppendChild(xdoc.CreateElement("SimIccID", xdoc["MBNProfile"].NamespaceURI)).InnerText = SIMNumber; 
           mbnProfile.AppendChild(xdoc.CreateElement("HomeProviderName", xdoc["MBNProfile"].NamespaceURI)).InnerText = SIMNumber; 
           mbnProfile.AppendChild(xdoc.CreateElement("AutoConnectOnInternet", xdoc["MBNProfile"].NamespaceURI)).InnerText = "true"; 
           mbnProfile.AppendChild(xdoc.CreateElement("ConnectionMode", xdoc["MBNProfile"].NamespaceURI)).InnerText = "auto"; 

           XmlElement context = (XmlElement)xdoc["MBNProfile"].AppendChild(xdoc.CreateElement("Context", xdoc["MBNProfile"].NamespaceURI)); 
           context.AppendChild(xdoc.CreateElement("AccessString", xdoc["MBNProfile"].NamespaceURI)); 
           XmlElement userLogonCred = (XmlElement)context.AppendChild(xdoc.CreateElement("UserLogonCred", xdoc["MBNProfile"].NamespaceURI)); 
           userLogonCred.AppendChild(xdoc.CreateElement("UserName", xdoc["MBNProfile"].NamespaceURI)); 
           userLogonCred.AppendChild(xdoc.CreateElement("Password", xdoc["MBNProfile"].NamespaceURI)); 
           context.AppendChild(xdoc.CreateElement("Compression", xdoc["MBNProfile"].NamespaceURI)); 
           context.AppendChild(xdoc.CreateElement("AuthProtocol", xdoc["MBNProfile"].NamespaceURI)); 

           xdoc["MBNProfile"]["Context"]["AccessString"].InnerText = APNAccessString; 
           xdoc["MBNProfile"]["Context"]["UserLogonCred"]["UserName"].InnerText = APNUsername; 
           xdoc["MBNProfile"]["Context"]["UserLogonCred"]["Password"].InnerText = APNPassword; 
           xdoc["MBNProfile"]["Context"]["Compression"].InnerText = APNCompression; 
           xdoc["MBNProfile"]["Context"]["AuthProtocol"].InnerText = APNAuthProtocol; 

           profileName = xdoc["MBNProfile"]["Name"].InnerText; 

           mbnConnProfileMgrInterface.CreateConnectionProfile(xdoc.OuterXml); 
          } 

          // Register the connection events 
          MbnConnectionManager connMgr = new MbnConnectionManager(); 
          IConnectionPointContainer connPointContainer = connMgr as IConnectionPointContainer; 

          Guid IID_IMbnConnectionEvents = typeof(IMbnConnectionEvents).GUID; 
          IConnectionPoint connPoint; 
          connPointContainer.FindConnectionPoint(ref IID_IMbnConnectionEvents, out connPoint); 

          ConnectionEventsSink connEventsSink = new ConnectionEventsSink(); 
          connPoint.Advise(connEventsSink, out cookie); if (showProgress) { MessageBox.Show("After registering events"); } 

          // Connect 
          IMbnConnection connection = mobileInterfaces[0].GetConnection(); 

          if (connection != null) 
          { 
           MBN_ACTIVATION_STATE state; 
           string connectionProfileName = String.Empty; 
           connection.GetConnectionState(out state, out connectionProfileName); 

           if (state != MBN_ACTIVATION_STATE.MBN_ACTIVATION_STATE_ACTIVATED && state != MBN_ACTIVATION_STATE.MBN_ACTIVATION_STATE_ACTIVATING) 
           { 
            if (String.IsNullOrEmpty(connectionProfileName)) 
            { 
             connectionProfileName = profileName; 
            } 
            uint requestID; 
            connection.Connect(MBN_CONNECTION_MODE.MBN_CONNECTION_MODE_PROFILE, connectionProfileName, out requestID); 

           } 
           else 
           { 
            // Do nothing, already connected 
           } 
          } 
          else 
          { 
           MessageBox.Show("Connection not found."); 
          } 
         } 
         else 
         { 
          MessageBox.Show("mbnConnProfileMgrInterface is null."); 
         } 
        } 
        else 
        { 
         MessageBox.Show("No subscriber info found."); 
        } 
       } 
       else 
       { 
        MessageBox.Show("No mobile interfaces found."); 
       } 
      } 
      else 
      { 
       MessageBox.Show("mbnInfMgrInterface is null."); 
      } 
     } 
     catch (Exception ex) 
     { 
      if (ex.Message.Contains("SIM is not inserted.")) 
      { 
       SIMNumber = "No SIM inserted."; 
      } 
      MessageBox.Show("LoginForm.DataConnection ConfigureWindowsDataConnection Error " + ex.Message); 
     } 
+0

Czy wiesz, czy mogę użyć twojego rozwiązania pod Windows 10 (np. LTSB 1607)? – creg

1

reagowania na zdarzenia przyłączeniowych (zdarzenia są rejestrowane w powyższym przykładzie):

public class ConnectionEventsSink : IMbnConnectionEvents 
    { 
     public ConnectionEventsSink() { } 

     public void OnConnectComplete(IMbnConnection connection, uint requestID, int status) 
     { 
      // Un-register the connect event - you might not want to do this, depends on your own requirements. Do do this you need the cookie uint from when the events were registered. 
      MbnConnectionManager connMgr = new MbnConnectionManager(); 
      IConnectionPointContainer connPointContainer = connMgr as IConnectionPointContainer; 

      Guid IID_IMbnConnectionEvents = typeof(IMbnConnectionEvents).GUID; 
      IConnectionPoint connPoint; 
      connPointContainer.FindConnectionPoint(ref IID_IMbnConnectionEvents, out connPoint); 

      connPoint.Unadvise(cookie); 

      switch (status) 
      { 
       case 0: 
        MobileBroadbandTest.Connected = true; 
        MessageBox.Show("Connected"); 
        break; 
       case -2141945334: 
        MessageBox.Show("There is no SIM in the device."); 
        break; 
       case -2141945328: 
        MessageBox.Show("A PIN is required for the operation to complete."); 
        break; 
       case -2141945335: 
        MessageBox.Show("The network service subscription has expired."); 
        break; 
       case -2141945337: 
        MessageBox.Show("The provider is not visible. This applies only to manual registration mode."); 
        break; 
       case -2141945340: 
        MessageBox.Show("The connection access string is not correct."); 
        break; 
       case -2141945333: 
        MessageBox.Show("An active voice call is in progress."); 
        break; 
       case -2141945339: 
        MessageBox.Show("There is already an Mobile Broadband context active. The Mobile Broadband service does not currently support multiple active contexts."); 
        break; 
       case -2141945336: 
        MessageBox.Show("The device radio is off."); 
        break; 
       case -2141945338: 
        MessageBox.Show("No active attached packet service is available."); 
        break; 
       case -2141945326: 
        MessageBox.Show("Generic Failure."); 
        break; 
       case -2141945320: 
        MessageBox.Show("Profile is invalid."); 
        break; 
       case -2141945319: 
        MessageBox.Show("Default profile exist."); 
        break; 
       case -2141945327: 
        MessageBox.Show("PIN is disabled."); 
        break; 
       case -2141945329: 
        MessageBox.Show("Pin is not supported."); 
        break; 
       case -2141945330: 
        MessageBox.Show("Providers not found."); 
        break; 
       case -2141945331: 
        MessageBox.Show("Device is not registered."); 
        break; 
       case -2141945332: 
        MessageBox.Show("Visible provider cache is invalid."); 
        break; 
       case -2141945341: 
        MessageBox.Show("Requested data class is not available."); 
        break; 
       case -2141945342: 
        MessageBox.Show("Bad SIM is inserted."); 
        break; 
       case -2141945343: 
        MessageBox.Show("Context is not activated."); 
        break; 

       default: 
        MessageBox.Show("Unexpected status: " + status.ToString()); 
        break; 
      } 
     } 

     public void OnVoiceCallStateChange(IMbnConnection connection) 
     { 
      // Do nothing 
     } 

     public void OnConnectStateChange(IMbnConnection connection) 
     { 
      // Do nothing 
     } 

     public void OnDisconnectComplete(IMbnConnection connection, uint requestID, int status) 
     { 
      // Do nothing 
     } 

}

+0

Uwaga dla innych czytelników: jest to bardzo ważne - w przeciwnym wypadku nie otrzymasz informacji o udanych/nieudanych połączeniach. Pamiętaj też, aby zarejestrować się tylko raz (ogólnie) lub uzyskać wiele powiadomień. Jest to bardzo odmienne podejście w stosunku do tych z nas, które używają do synchronicznego użycia (powiedzmy) RAS. –

Powiązane problemy