2010-06-07 3 views
3

RIM API를 사용할 수 있습니까? 사용 가능한 네트워크 서비스 목록이나 장치의 Wi-Fi 네트워크를 얻고 네트워크 통신을 위해 선택한 네트워크 액세스 지점을 설정하는 데 도움이됩니까?BlackBerry에서 사용 가능한 Wi-Fi 네트워크 검색

내 응용 프로그램이 GPRS, WAP 등과 같은 모바일 네트워크를 비활성화 할 수 있습니까?

예 :
응용 프로그램이 장치에 설정 된 이전 와이파이 네트워크 액세스 포인트가없는 경우에도 Wi-Fi 연결을 검색하고 사용 가능한 Wi-Fi 연결을 나열해야 시작됩니다. 그런 다음 사용자는 네트워크 통신을 위해 연결할 Wi-Fi 연결을 선택합니다. 응용 프로그램 외부에서 브라우저 또는 다른 응용 프로그램과 같은 인터넷 통신은 동일한 선택한 Wi-Fi 연결을 통해 수행해야합니다. Wi-Fi 스캔 및 연결 설정은 BlackBerry Wi-Fi 설정과 거의 유사합니다.

저는 BlackBerry OS 4.5, 4.7 및 5.0에서이 작업을 수행하려고합니다.

업데이트

문제는 내가 응용 프로그램을 통해 와이파이 스캔을 찾고있다. 그것은 응용 프로그램을 통해 사용할 수있는 Wi-Fi 액세스 포인트 또는 핫스팟을 스캔하고 장치로 선택하여 액세스 포인트 중 하나를 설정 한 다음 통신을 위해 액세스 포인트와 연결할 수 있습니다.

기본적으로 BlackBerry의 "연결 관리"에서 Wi-Fi 연결을 설정하는 것과 비슷합니까? 나는 응용 프로그램을 통해 비슷한 일을해야합니다.

일부 BlackBerry 포럼에서 OS v5.0에 패키지가 있음을 알게되었습니다. 즉, net.rim.device.api.wlan.hotspot 패키지가 Wi-Fi 핫스팟을 가져옵니다. 그러나 오랫동안 검색 한 후에 나는 어떤 샘플 예제 나 많은 설명을 찾지 못했습니다. API 문서를 조사하여 구현하려고 시도했지만 필자는이를 입증하지 못했습니다.

이 코드 나 샘플 코드와 관련된 아이디어가 있으면 도움이 될 것입니다.

+0

에서 찾을 수 있습니다 전화 연결을 검사하고 얻으려면? 핫스팟 클래스에서 예제 코드를 찾고 무엇이든 찾으려고 애 쓰고 있습니다. – Tjaart

답변

5

글쎄, 응용 프로그램에서 사용 가능한 모든 네트워크를 검색하려면 RIM의 NetworkDiagnostic tool을 사용할 수 있습니다. 코드의

꽃밥 조각은 가장 좋은 연결 문자열이에 대한 해결책을 찾았나요 How to reliably establish a network connection on any BlackBerry device,

/** 
* Determines what connection type to use and returns the necessary string to use it. 
* @return A string with the connection info 
*/ 
private static String getConnectionString() 
{ 
    // This code is based on the connection code developed by Mike Nelson of AccelGolf. 
    // http://blog.accelgolf.com/2009/05/22/blackberry-cross-carrier-and-cross-network-http-connection 
    String connectionString = null; 

    // Simulator behavior is controlled by the USE_MDS_IN_SIMULATOR variable. 
    if (DeviceInfo.isSimulator()) 
    { 
      if (UploaderThread.USE_MDS_IN_SIMULATOR) 
      { 
        logMessage("Device is a simulator and USE_MDS_IN_SIMULATOR is true"); 
        connectionString = ";deviceside=false"; 
      } 
      else 
      { 
        logMessage("Device is a simulator and USE_MDS_IN_SIMULATOR is false"); 
        connectionString = ";deviceside=true"; 
      } 
    } 

    // Wi-Fi is the preferred transmission method. 
    else if (WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED) 
    { 
     logMessage("Device is connected via Wifi."); 
     connectionString = ";interface=wifi"; 
    } 

    // Is the carrier network the only way to connect? 
    else if ((CoverageInfo.getCoverageStatus() & CoverageInfo.COVERAGE_DIRECT) == CoverageInfo.COVERAGE_DIRECT) 
    { 
     logMessage("Carrier coverage."); 

     String carrierUid = getCarrierBIBSUid(); 
     if (carrierUid == null) 
     { 
      // Has carrier coverage, but not BIBS. So use the carrier's TCP network 
      logMessage("No Uid"); 
      connectionString = ";deviceside=true"; 
     } 
     else 
     { 
      // otherwise, use the Uid to construct a valid carrier BIBS request 
      logMessage("uid is: " + carrierUid); 
      connectionString = ";deviceside=false;connectionUID="+carrierUid + ";ConnectionType=mds-public"; 
     } 
    } 

    // Check for an MDS connection instead (BlackBerry Enterprise Server). 
    else if ((CoverageInfo.getCoverageStatus() & CoverageInfo.COVERAGE_MDS) == CoverageInfo.COVERAGE_MDS) 
    { 
     logMessage("MDS coverage found"); 
     connectionString = ";deviceside=false"; 
    } 

    // If there is no connection available abort to avoid bugging the user unnecssarily. 
    else if (CoverageInfo.getCoverageStatus() == CoverageInfo.COVERAGE_NONE) 
    { 
     logMessage("There is no available connection."); 
    } 

    // In theory, all bases are covered so this shouldn't be reachable. 
    else 
    { 
     logMessage("no other options found, assuming device."); 
     connectionString = ";deviceside=true"; 
    } 

    return connectionString; 
} 

/** 
* Looks through the phone's service book for a carrier provided BIBS network 
* @return The uid used to connect to that network. 
*/ 
private static String getCarrierBIBSUid() 
{ 
    ServiceRecord[] records = ServiceBook.getSB().getRecords(); 
    int currentRecord; 

    for (currentRecord = 0; currentRecord < records.length; currentRecord++) 
    { 
     if (records[currentRecord].getCid().toLowerCase().equals("ippp")) 
     { 
      if (records[currentRecord].getName().toLowerCase().indexOf("bibs") >= 0) 
      { 
       return records[currentRecord].getUid(); 
      } 
     } 
    } 
    return null; 
} 
+0

RIM NetworkDiagnosticTool을 실행했지만 사용 가능한 여러 개의 WiFi 네트워크 목록을 제공하지 않는 것 같습니다. 나는 또한 소스 코드를 검사하고 그 정보를 수집 (표시하지 않음)하는 것을 본 적이 없다. – Nate

관련 문제