获取 4.6.1 上黑莓连接的后缀字符串



我正在尝试开发一个使用HttpRequest请求网页的应用程序。问题是我仍然找不到在OS 4.6.1的连接字符串中获取后缀的正确方法。

谢谢。

我相信我用来创建连接字符串的链接(OS 5.0 之前)是以下两个:

http://supportforums.blackberry.com/t5/Java-Development/Different-ways-to-make-an-HTTP-or-socket-connection/ta-p/445879

http://docs.blackberry.com/en/developers/deliverables/34480/Network_transport_options_1293321_11.jsp

黑莓当然支持几种不同的传输方式(Wifi,WAP,BIS等)。 您可能希望确定要使用的传输,并根据任何时候可用的传输以及优先级创建连接字符串。

下面是可从 blackberry.com 下载的更多示例代码,可帮助生成连接字符串后缀。 有关实际下载,请参阅底部附近的附件链接。

另外,如果你时间紧迫,没有时间阅读我在另一个答案中列出的资源,只是想要一些快速代码,我记得黑莓最初的Facebook SDK中有一个实现看起来很接近我自己写的(对不起,我不能发布我写的代码,因为它是我客户的)。 但是,Facebook SDK的实现似乎是免费发布的。 我再也找不到它的链接了,但我会把它粘贴到下面供您欣赏:

/**
 * Copyright (c) E.Y. Baskoro, Research In Motion Limited.
 * 
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without 
 * restriction, including without limitation the rights to use, 
 * copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the 
 * Software is furnished to do so, subject to the following 
 * conditions:
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
 * OTHER DEALINGS IN THE SOFTWARE.
 * 
 * This License shall be included in all copies or substantial 
 * portions of the Software.
 * 
 * The name(s) of the above copyright holders shall not be used 
 * in advertising or otherwise to promote the sale, use or other 
 * dealings in this Software without prior written authorization.
 * 
 */
package com.blackberry.util.network;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import com.blackberry.util.log.Logger;
import net.rim.device.api.io.http.HttpHeaders;
import net.rim.device.api.io.http.HttpProtocolConstants;
import net.rim.device.api.servicebook.ServiceBook;
import net.rim.device.api.servicebook.ServiceRecord;
import net.rim.device.api.system.Branding;
import net.rim.device.api.system.CoverageInfo;
import net.rim.device.api.system.DeviceInfo;
import net.rim.device.api.system.WLANInfo;
public class HttpConnectionFactory {
   public static final int TRANSPORT_WIFI = 1;
   public static final int TRANSPORT_BES = 2;
   public static final int TRANSPORT_BIS = 4;
   public static final int TRANSPORT_DIRECT_TCP = 8;
   public static final int TRANSPORT_WAP2 = 16;
   public static final int TRANSPORT_SIM = 32;
   public static final int TRANSPORTS_ANY = TRANSPORT_WIFI | TRANSPORT_BES | TRANSPORT_BIS | TRANSPORT_DIRECT_TCP | TRANSPORT_WAP2 | TRANSPORT_SIM;
   public static final int TRANSPORTS_AVOID_CARRIER = TRANSPORT_WIFI | TRANSPORT_BES | TRANSPORT_BIS | TRANSPORT_SIM;
   public static final int TRANSPORTS_CARRIER_ONLY = TRANSPORT_DIRECT_TCP | TRANSPORT_WAP2 | TRANSPORT_SIM;
   public static final int DEFAULT_TRANSPORT_ORDER[] = { TRANSPORT_SIM, TRANSPORT_WIFI, TRANSPORT_BIS, TRANSPORT_BES, TRANSPORT_WAP2, TRANSPORT_DIRECT_TCP };
   private static final int TRANSPORT_COUNT = DEFAULT_TRANSPORT_ORDER.length;
   // private static ServiceRecord srMDS[], srBIS[], srWAP2[], srWiFi[];
   private static ServiceRecord srWAP2[];
   private static boolean serviceRecordsLoaded = false;
   private int transports[];
   private int lastTransport = -1;
   protected Logger log = Logger.getLogger(getClass());
   public HttpConnectionFactory() {
      this(0);
   }
   public HttpConnectionFactory(int allowedTransports) {
      this(transportMaskToArray(allowedTransports));
   }
   public HttpConnectionFactory(int transportPriority[]) {
      if (!serviceRecordsLoaded) {
         loadServiceBooks(false);
      }
      transports = transportPriority;
   }
   public static String getUserAgent() {
      StringBuffer sb = new StringBuffer();
      sb.append("BlackBerry");
      sb.append(DeviceInfo.getDeviceName());
      sb.append("/");
      sb.append(DeviceInfo.getSoftwareVersion());
      sb.append(" Profile/");
      sb.append(System.getProperty("microedition.profiles"));
      sb.append(" Configuration/");
      sb.append(System.getProperty("microedition.configuration"));
      sb.append(" VendorID/");
      sb.append(Branding.getVendorId());
      return sb.toString();
   }
   public static String getProfile() {
      StringBuffer sb = new StringBuffer();
      sb.append("http://www.blackberry.net/go/mobile/profiles/uaprof/");
      sb.append(DeviceInfo.getDeviceName());
      sb.append("/");
      sb.append(DeviceInfo.getSoftwareVersion().substring(0, 3)); //RDF file format is 4.5.0.rdf (does not include build version)
      sb.append(".rdf");
      return sb.toString();
   }
   public HttpConnection getHttpConnection(String pURL) {
      return getHttpConnection(pURL, null, null);
   }
   public HttpConnection getHttpConnection(String pURL, HttpHeaders headers) {
      return getHttpConnection(pURL, headers, null);
   }
   public HttpConnection getHttpConnection(String pURL, byte[] data) {
      return getHttpConnection(pURL, null, data);
   }
   public HttpConnection getHttpConnection(String pURL, HttpHeaders headers, byte[] data) {
      if ((pURL.length() > 5) && pURL.startsWith("cod://")) {
         return new LocalHttpConnection(pURL);
      }
      int curIndex = 0;
      HttpConnection con = null;
      while ((con = tryHttpConnection(pURL, curIndex, headers, data)) == null) {
         try {
            curIndex = nextTransport(curIndex);
         } catch (HttpConnectionFactoryException e) {
            e.printStackTrace();
            break;
         } finally {
         }
      }
      if (con != null) {
         setLastTransport(transports[curIndex]);
      }
      return con;
   }
   private int nextTransport(int curIndex) throws HttpConnectionFactoryException {
      if ((curIndex >= 0) && (curIndex < transports.length - 1)) {
         return curIndex + 1;
      } else {
         throw new HttpConnectionFactoryException("No more transport available.");
      }
   }
   private HttpConnection tryHttpConnection(String pURL, int tIndex, HttpHeaders headers, byte[] data) {
      HttpConnection con = null;
      OutputStream os = null;
      log.debug("Trying " + getTransportName(transports[tIndex]) + "... ");
      switch (transports[tIndex]) {
      case TRANSPORT_SIM:
         try {
            con = getSimConnection(pURL, false);
         } catch (IOException e) {
            log.debug(e.getMessage());
         } finally {
            break;
         }
      case TRANSPORT_WIFI:
         try {
            con = getWifiConnection(pURL);
         } catch (IOException e) {
            log.debug(e.getMessage());
         } finally {
            break;
         }
      case TRANSPORT_BES:
         try {
            con = getBesConnection(pURL);
         } catch (IOException e) {
            log.debug(e.getMessage());
         } finally {
            break;
         }
      case TRANSPORT_BIS:
         try {
            con = getBisConnection(pURL);
         } catch (IOException e) {
            log.debug(e.getMessage());
         } finally {
            break;
         }
      case TRANSPORT_DIRECT_TCP:
         try {
            con = getTcpConnection(pURL);
         } catch (IOException e) {
         } finally {
            break;
         }
      case TRANSPORT_WAP2:
         try {
            con = getWap2Connection(pURL);
         } catch (IOException e) {
            log.debug(e.getMessage());
         } finally {
            break;
         }
      }
      log.debug("con = " + con);
      if (con != null) {
         try {
            log.debug("url = " + con.getURL());
            //add headers to connection
            if (headers != null) {
               int size = headers.size();
               for (int i = 0; i < size;) {
                  String header = headers.getPropertyKey(i);
                  String value = headers.getPropertyValue(i++);
                  if (value != null) {
                     con.setRequestProperty(header, value);
                  }
               }
            }
            // post data
            if (data != null) {
               con.setRequestMethod(HttpConnection.POST);
               con.setRequestProperty(HttpProtocolConstants.HEADER_CONTENT_TYPE, HttpProtocolConstants.CONTENT_TYPE_APPLICATION_X_WWW_FORM_URLENCODED);
               con.setRequestProperty(HttpProtocolConstants.HEADER_CONTENT_LENGTH, String.valueOf(data.length));
               os = con.openOutputStream();
               os.write(data);
            } else {
               con.setRequestMethod(HttpConnection.GET);
            }
         } catch (IOException e) {
            e.printStackTrace();
         }
      }
      return con;
   }
   public int getLastTransport() {
      return lastTransport;
   }
   public String getLastTransportName() {
      return getTransportName(getLastTransport());
   }
   private void setLastTransport(int pLastTransport) {
      lastTransport = pLastTransport;
   }
   private HttpConnection getSimConnection(String pURL, boolean mdsSimulatorRunning) throws IOException {
      if (DeviceInfo.isSimulator()) {
         if (mdsSimulatorRunning) {
            return getConnection(pURL, ";deviceside=false", null);
         } else {
            return getConnection(pURL, ";deviceside=true", null);
         }
      }
      return null;
   }
   private HttpConnection getBisConnection(String pURL) throws IOException {
      if (CoverageInfo.isCoverageSufficient(4 /* CoverageInfo.COVERAGE_BIS_B */)) {
         return getConnection(pURL, ";deviceside=false;ConnectionType=mds-public", null);
      }
      return null;
   }
   private HttpConnection getBesConnection(String pURL) throws IOException {
      if (CoverageInfo.isCoverageSufficient(2 /* CoverageInfo.COVERAGE_MDS */)) {
         return getConnection(pURL, ";deviceside=false", null);
      }
      return null;
   }
   private HttpConnection getWifiConnection(String pURL) throws IOException {
      if (WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED) {
         return getConnection(pURL, ";interface=wifi", null);
      }
      return null;
   }
   private HttpConnection getWap2Connection(String pURL) throws IOException {
      if (CoverageInfo.isCoverageSufficient(1 /* CoverageInfo.COVERAGE_DIRECT */) && (srWAP2 != null) && (srWAP2.length != 0)) {
         return getConnection(pURL, ";deviceside=true;ConnectionUID=", srWAP2[0].getUid());
      }
      return null;
   }
   private HttpConnection getTcpConnection(String pURL) throws IOException {
      if (CoverageInfo.isCoverageSufficient(1 /* CoverageInfo.COVERAGE_DIRECT */)) {
         return getConnection(pURL, ";deviceside=true", null);
      }
      return null;
   }
   private HttpConnection getConnection(String pURL, String transportExtras1, String transportExtras2) throws IOException {
      StringBuffer fullUrl = new StringBuffer();
      fullUrl.append(pURL);
      if (transportExtras1 != null) {
         fullUrl.append(transportExtras1);
      }
      if (transportExtras2 != null) {
         fullUrl.append(transportExtras2);
      }
      return (HttpConnection) Connector.open(fullUrl.toString());
   }
   public static void reloadServiceBooks() {
      loadServiceBooks(true);
   }
   private static synchronized void loadServiceBooks(boolean reload) {
      if (serviceRecordsLoaded && !reload) {
         return;
      }
      ServiceBook sb = ServiceBook.getSB();
      ServiceRecord[] records = sb.getRecords();
      Vector mdsVec = new Vector();
      Vector bisVec = new Vector();
      Vector wap2Vec = new Vector();
      Vector wifiVec = new Vector();
      if (!serviceRecordsLoaded) {
         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();
               if ((cid.indexOf("wptcp") != -1) && (uid.indexOf("wap2") != -1) && (uid.indexOf("wifi") == -1) && (uid.indexOf("mms") == -1)) {
                  wap2Vec.addElement(myRecord);
               }
            }
         }
         srWAP2 = new ServiceRecord[wap2Vec.size()];
         wap2Vec.copyInto(srWAP2);
         wap2Vec.removeAllElements();
         wap2Vec = null;
         serviceRecordsLoaded = true;
      }
   }
   public static int[] transportMaskToArray(int mask) {
      if (mask == 0) {
         mask = TRANSPORTS_ANY;
      }
      int numTransports = 0;
      for (int i = 0; i < TRANSPORT_COUNT; i++) {
         if ((DEFAULT_TRANSPORT_ORDER[i] & mask) != 0) {
            numTransports++;
         }
      }
      int transports[] = new int[numTransports];
      int index = 0;
      for (int i = 0; i < TRANSPORT_COUNT; i++) {
         if ((DEFAULT_TRANSPORT_ORDER[i] & mask) != 0) {
            transports[index++] = DEFAULT_TRANSPORT_ORDER[i];
         }
      }
      return transports;
   }
   private static String getTransportName(int transport) {
      String tName;
      switch (transport) {
      case TRANSPORT_WIFI:
         tName = "WIFI";
         break;
      case TRANSPORT_BES:
         tName = "BES";
         break;
      case TRANSPORT_BIS:
         tName = "BIS";
         break;
      case TRANSPORT_DIRECT_TCP:
         tName = "TCP";
         break;
      case TRANSPORT_WAP2:
         tName = "WAP2";
         break;
      case TRANSPORT_SIM:
         tName = "SIM";
         break;
      default:
         tName = "UNKNOWN";
         break;
      }
      return tName;
   }
}

最新更新