Home Code-Schnipsel Netzwerk, Socket Symbian Zugangspunkte auslesen

iPhone Gewinnspiel

Symbian Zugangspunkte auslesen PDF Drucken E-Mail
Share
Geschrieben von: Philipp   
MONDAY, 10 MARCH 2008 03:21
Gestet auf Symbian 6 - 8 Series 60, Series 80 und UIQ

Im folgenden zeige ich, wie auf einem Symbian Gerät die Zugangspunkte (Einwahlpunkte für den Zugang zum Internet) ausgelesen werden und diese dann zur Weiterverarbeitungen in einem CArrayFixFlat alphabetisch sortiert zurückgegeben werden können.

Die Zungangspunkte werden unter Symbian intern in CommDatabase gespeichert. Es handelt sich dabei um ein propritäres Symbian  SQL System, auf welches man theoretisch auch mit RDbNamedDatabase zugreifen könnte. Symbian stellt uns aber speziel für die  CommDatabase die Klasse CCommsDatabase zur Verfügung.

Ersteinmal inlcudieren wir das benötigte header-file und erstellen uns ein struct, welches die relevanten Zugangspunktdaten für die Sortierung beinhaltet:
#include <commdb.h>                       

struct TAccesspointInfo
{
    TUint32        APID;
    TBuf<40>       APName;
};

Wir erstellen uns ein CCommsDatabase Object für alle Internet-Access-Points (EDatabaseTypeIAP)
// connect the CommsDatabase
CCommsDatabase* dataBase = CCommsDatabase::NewL(EDatabaseTypeIAP);
CleanupStack::PushL(dataBase);

Nun legen wir die Filter fest, um die Art der Zugangspunkte, welche wir zurück bekommen wollen,  zu definieren:
// define the filter
TInt filter = ECommDbBearerGPRS | ECommDbBearerLAN;
ACHTUNG: der Filtertyp ECommDbBearerLAN ist erst seit Symbian 7 verfügbar. Es werden mit diesen zusätzlich WLAN-Zugangspunkte gewählt. ECommDbBearerGPRS  steht für alle Zugangspunkte die über GRPS oder auch UMTS eine Verbindung herstellen.

Als nächstes erstellen wir uns eine view vom Typ CCommsDbTableView, welche wir auch gleich angewandt auf die Datenbank ausführen um somit unsere Zugangspunkte zu erhalten
// the view
CCommsDbTableView *view = dataBase->OpenIAPTableViewMatchingBearerSetLC(filter,ECommDbConnectionDirectionOutgoing);

Was wir jetzt noch brauchen, ist das im Endeffekt zurück zugebene Array:
// fill the array for sorting
CArrayFixFlat<TAccesspointInfo>* sortedArr = new (ELeave) CArrayFixFlat<TAccesspointInfo>(1);
CleanupStack::PushL(sortedArr); 

Nun die eigentlichen Daten aus der View auslesen und dem Array hinzufügen:
// add the accesspoints to the array
TInt apIndex = view->GotoFirstRecord();

while (apIndex  == KErrNone)
{
   TAccesspointInfo apInfo;
       
   // get the name
   view->ReadTextL(TPtrC(COMMDB_NAME), apInfo.APName);
       
   // get the ID               
   TUint32 ID = 0;
   view->ReadUintL(TPtrC(COMMDB_ID), apInfo.APID);
   
   // add to array
   sortedArr->AppendL(apInfo);   
   apIndex = view->GotoNextRecord();
}

Jetzt sind wir an den Punkt angekommen, an welchen wir das Array alphabetisch sortieren können:
// sort the array
TKeyArrayFix sortKey(_FOFF(TAccesspointInfo, APName), ECmpCollated);
sortedArr->Sort(sortKey);

Als letztes nur noch aufräumen und das Ergebniss zurück geben:
// cleanup
CleanupStack::Pop();     // sortedArr
CleanupStack::PopAndDestroy(2); // view, dataBase

return sortedArr;

Das Ganze könnte dann in einer Funktion wie folgt aussehen:
#include <commdb.h>                        // needed for AP-Stuff

struct TAccesspointInfo
{
    TUint32        APID;
    TBuf<40>       APName;
};

/**
* returns an array with accesspoints and the ID  of every accesspoint
**/
CArrayFixFlat<TAccesspointInfot>* GetAccesspointsL()
{
   // connect the CommsDatabase
   CCommsDatabase* dataBase = CCommsDatabase::NewL(EDatabaseTypeIAP);
   CleanupStack::PushL(dataBase);

   // define the filter
   TInt filter = ECommDbBearerGPRS | ECommDbBearerLAN;

  // the view
  CCommsDbTableView *view = dataBase->OpenIAPTableViewMatchingBearerSetLC(filter,ECommDbConnectionDirectionOutgoing);

   // fill the array for sorting
   CArrayFixFlat<TAccesspointInfo>* sortedArr = new (ELeave) CArrayFixFlat<TAccesspointInfo>(1);
   CleanupStack::PushL(sortedArr);

   // add the accesspoints to the array
   TInt apIndex = view->GotoFirstRecord();

   while (apIndex  == KErrNone)
   {
      TAccesspointInfo apInfo;
       
      // get the name
      view->ReadTextL(TPtrC(COMMDB_NAME), apInfo.APName);
       
      // get the ID               
      TUint32 ID = 0;
      view->ReadUintL(TPtrC(COMMDB_ID), apInfo.APID);
   
      // add to array
      sortedArr->AppendL(apInfo);   
      apIndex = view->GotoNextRecord();
    }

   // sort the array
   TKeyArrayFix sortKey(_FOFF(TAccesspointInfo, APName), ECmpCollated);
   sortedArr->Sort(sortKey);

   // cleanup
   CleanupStack::Pop();     // sortedArr
   CleanupStack::PopAndDestroy(2); // view, dataBase

   return sortedArr;
}

Ihren Kommentar hinzufügen

Ihr Name:
Ihre Webseite:
Betreff:
Kommentar:
  Bild, welches den Sicherheitscode enthält
Sicherheitscode:
LAST_UPDATED2