Search for Available Transports on the Device:
In order to connect to the internet from our blackberry applications we first need to search for the available transports. For a transport to be available we need to check whether there is sufficient coverage for that transport on the device and that there is a ServiceRecord available for that transport.Searching for ServiceRecords:
The ServiceBook object should be used to get the ServiceRecords:ServiceBook sb = ServiceBook.getSB(); ServiceRecord[] records = sb.getRecords();Now that we have got all the service records in the records[]array we can traverse all the records and identify the available transports by checking the cid and uid of each ServiceRecords as follows:
/** Stores transport ServiceBooks if found. Otherwise, null */
private ServiceRecord srMDS, srBIS, srWAP, srWAP2, srWiFi, srUnit; 
/** Flags indicating the coverage status of each transport */
private boolean
    coverageTCP = false,
    coverageMDS = false,
    coverageBIS = false,
    coverageWAP = false,
    coverageWAP2 = false,
    coverageWiFi = false,
    coverageUnite = false;
for (int i = 0; i < records.length; i++) {
ServiceRecord myRecord = records[i];
      String cid, uid;
      if (myRecord.isValid() && !myRecord.isDisabled()) {
          cid = myRecord.getCid().toLowerCase();
          uid = myRecord.getUid().toLowerCase();
          // BIS
          if (cid.indexOf("ippp") != -1 && uid.indexOf("gpmds") != -1) {
              srBIS = myRecord;
          }
          // BES
          if (cid.indexOf("ippp") != -1 && uid.indexOf("gpmds") == -1) {
              srMDS = myRecord;
          }
          // WiFi
          if (cid.indexOf("wptcp") != -1 && uid.indexOf("wifi") != -1) {
              srWiFi = myRecord;
          }
          // Wap1.0
          if (getConfigType(myRecord) == CONFIG_TYPE_WAP && cid.equalsIgnoreCase("wap")) {
              srWAP = myRecord;
          }
          // Wap2.0
          if (cid.indexOf("wptcp") != -1 && uid.indexOf("wifi") == -1 && uid.indexOf("mms") == -1) {
              srWAP2 = myRecord;
          }
          // Unite
          if (getConfigType(myRecord) == CONFIG_TYPE_BES && myRecord.getName().equals(UNITE_NAME)) {
              srUnite = myRecord;
          }
      }
}
Searching For Coverages:
Now by using the CoverageInfo class (net.rim.device.api.system.CoverageInfo) we have to determine the transports for which we have sufficient coverage.if (CoverageInfo.isCoverageSufficient(CoverageInfo.COVERAGE_BIS_B)) {
coverageBIS = true;
}
if (CoverageInfo.isCoverageSufficient(CoverageInfo.COVERAGE_MDS)) {
    coverageMDS = true;
    coverageUnite = true;
}
/**
 * In JDE 4.5 CoverageInfo changed the name of COVERAGE_CARRIER to COVERAGE_DIRECT
 * The constant value for both is the same, '1', so we can ALSO use 1 to avoid any
 * dependency on JDE 4.5
 */
if (CoverageInfo.isCoverageSufficient(1)) {
    coverageTCP = true;
    coverageWAP = true;
    coverageWAP2 = true;
}
//if(WLANInfo.getWLANState()==WLANInfo.WLAN_STATE_CONNECTED){  // <-- This line requires JDE 4.5 or later (WLANInfo)
if (CoverageInfo.isCoverageSufficient(1, RadioInfo.WAF_WLAN, false)) {
    coverageWiFi = true;
}
Necessary Utilities Methods are given below:
/**
     * Gets the config type of a ServiceRecord using getDataInt below
     * @param record    A ServiceRecord
     * @return  configType of the ServiceRecord
     */
    private int getConfigType(ServiceRecord record) {
        return getDataInt(record, 12);
    }
    /**
     * Gets the config type of a ServiceRecord. Passing 12 as type returns the configType.   
     * @param record    A ServiceRecord
     * @param type      dataType
     * @return  configType
     */
    private int getDataInt(ServiceRecord record, int type) {
        DataBuffer buffer = null;
        buffer = getDataBuffer(record, type);
        if (buffer != null) {
            try {
                return ConverterUtilities.readInt(buffer);
            } catch (EOFException e) {
                return -1;
            }
        }
        return -1;
    }
    /** 
     * Utility Method for getDataInt()
     */
    private DataBuffer getDataBuffer(ServiceRecord record, int type) {
        byte[] data = record.getApplicationData();
        if (data != null) {
            DataBuffer buffer = new DataBuffer(data, 0, data.length, true);
            try {
                buffer.readByte();
            } catch (EOFException e1) {
                return null;
            }
            if (ConverterUtilities.findType(buffer, type)) {
                return buffer;
            }
        }
        return null;
    }
Now that we have got ServiceRecords and Coverage information for all the available transports, we can use these information to connect to the internet.http://www.blackberry.com/developers/docs/4.7.0api/javax/microedition/io/Connector.html
Adding Connection Parameter String with the URL:
For each type of connection method specific connection parameters should be appended with the base url. The connection parameters for each transport are as follows:MDS (BES):
connection_parameter = ";deviceside=false";
BIS:
connection_parameter = ";deviceside=false;ConnectionType=" + "mds-public";
Direct TCP:
connection_parameter = ";deviceside=true";
WAP 1.0:
connection_parameter = ";WapGatewayIP=" + gatewayIP + ";WapGatewayPort=" + gatewayPort + ";WapSourceIP=" + + ";WapSourcePort=" + sourcePort + ";TunnelAuthUsername=" + username + ";TunnelAuthPassword=" + password + ";WapEnableWTLS=true";
WAP 2.0:
connection_parameter = ";deviceside=true" + ((srWAP2 == null) ? "" : (";ConnectionUID=" + srWAP2.getUid()));
WiFi:
connection_parameter = ";interface=wifi";
Appending this connection_parameter with the base url we have got the final URL (suppose full_url). An HttpConnection object can be made with this URL to start an Http Connection.
Useful links:
supportforums.blackberry.com - Different ways to make an HTTP or socket connection