2012-10-30 2 views
0

GPS를 사용하지 않고 내 Blackberry 장치의 위치를 ​​가져오고 싶습니다. 그래서, 결과를 Opencellid를 사용하고 있습니다. 그러나 그것은 나에게 틀린 위치 결과를주고있다. 누구나 정확한 절차와 내가 잘못하고있는 것을 명확히 할 수 있습니까?opencellid은 (는) 실제 위치를 검색하지 못했습니다.

내 코드 :

public final static String getQueryString(){ 
    cellID = Integer.toString(GPRSInfo.getCellInfo().getCellId()); 
    // Retrieves the Location Area Code. 
    lac = Integer.toString(GPRSInfo.getCellInfo().getLAC()); 
    // Retrieves the mobile country code. 
    mcc = Integer.toHexString(RadioInfo.getMCC(RadioInfo.getCurrentNetworkIndex())); 
    // Retrieves the Location network Code. 
    mnc = Integer.toHexString(RadioInfo.getMNC(RadioInfo.getCurrentNetworkIndex()));  
    queryStr="http://www.opencellid.org/cell/get? 
    key="+myapikey+"&mcc="+mcc+"&mnc="+mnc+"&cellid="+cellID+"&lac="+lac+"&fmt=txt"; 
    return queryStr; 
} 

public void httpGetRequest(){ 
    HttpConnection conn = null; 
    InputStream in = null; StringBuffer buff = new StringBuffer(); String result = ""; 
    try { 
     conn=(HttpConnection) Connector.open(getQueryString()+getString(),Connector.READ); 
     conn.setRequestMethod(HttpConnection.GET); conn.setRequestProperty("User-Agent", "Profile/MIDP-1.0 Confirguration/CLDC-1.0"); 
     conn.setRequestProperty("Content-Type", "plain/text"); 
     in = conn.openInputStream(); 

     int car; 
     while((car=in.read())!= -1){ 
      buff.append((char)car); 
     } 
     in.close(); 
     conn.close(); 
     result=buff.toString(); 

     //get latitude and longitude 
     if(result.startsWith("err")){ 
      System.out.println("Cell not found!"); 
     }else{ 
      int pos=result.indexOf(','); 
      String lat=result.substring(0,pos); 
      int pos2=result.indexOf(',',pos+1); 
      String lon=result.substring(pos+1,pos2); 
      System.out.println(lat+" "+lon); 
      getLocationFromGoogleMaps(lat,lon); 
     } 
    } catch (Exception ex) { 
     System.out.println("====Exception: "+ex.getMessage()); 
    } finally { 
     try { 
      if (in != null) { 
       in.close(); 
      } 
      conn.close(); 
     } catch (IOException e) { 
      System.out.println("====Exception: "+e.getMessage()); 
     } 
    } 
} 
+0

below- 주어진? – Signare

+0

예, GPS를 사용하지 않습니다. –

+0

오류 또는 예외는 무엇입니까? 또한 셀 사이트 모드에서 기본 제공되는 LocationProvider를 사용하여 위치를 검색하는 방법을 확인하는 것이 좋습니다. http://docs.blackberry.com/en/developers/deliverables/34488/GPS_overview_1679738_11.jsp –

답변

0

이 시도는 -

  try { 

       int cellID = GPRSInfo.getCellInfo().getCellId(); 
       int lac = GPRSInfo.getCellInfo().getLAC(); 
       String urlString2 = "http://www.google.com/glm/mmap"; 
       // Open a connection to Google Maps API 
       ConnectionFactory connFact = new ConnectionFactory();     ConnectionDescriptor connDesc; 
       connDesc = connFact.getConnection(urlString2); 

       HttpConnection httpConn2; 
       httpConn2 = (HttpConnection)connDesc.getConnection(); 
       httpConn2.setRequestMethod("POST"); 

       // Write some custom data to Google Maps API 
       OutputStream outputStream2 = httpConn2.openOutputStream();//getOutputStream(); 
       WriteDataGoogleMaps(outputStream2, cellID, lac); 

       // Get the response 
       InputStream inputStream2 = httpConn2.openInputStream();//getInputStream(); 
       DataInputStream dataInputStream2 = new DataInputStream(inputStream2); 

       // Interpret the response obtained 
       dataInputStream2.readShort(); 
       dataInputStream2.readByte(); 

       int code = dataInputStream2.readInt(); 
       //Dialog.alert(code+""); 

       if (code == 0) { 
        latitude= dataInputStream2.readInt()/1000000D; 
        longitude=dataInputStream2.readInt()/1000000D; 

        //Dialog.alert(latitude+"-----"+longitude); 

        dataInputStream2.readInt(); 
        dataInputStream2.readInt(); 
        dataInputStream2.readUTF(); 

       } else { 
        System.out.println("Error obtaining Cell Id "); 
       } 
       outputStream2.close(); 
       inputStream2.close(); 
      } catch (Exception e) { 
       System.out.println("Error: " + e.getMessage()); 
      } 

WriteDataGoogleMaps 기능은

당신이 네트워크에서 위치를 얻으려면
private static void WriteDataGoogleMaps(OutputStream out, int cellID, int lac) 
throws IOException { 
    DataOutputStream dataOutputStream = new DataOutputStream(out); 
    dataOutputStream.writeShort(21); 
    dataOutputStream.writeLong(0); 
    dataOutputStream.writeUTF("en"); 
    dataOutputStream.writeUTF("Android"); 
    dataOutputStream.writeUTF("1.0"); 
    dataOutputStream.writeUTF("Web"); 
    dataOutputStream.writeByte(27); 
    dataOutputStream.writeInt(0); 
    dataOutputStream.writeInt(0); 
    dataOutputStream.writeInt(3); 
    dataOutputStream.writeUTF(""); 
    dataOutputStream.writeInt(cellID); 
    dataOutputStream.writeInt(lac); 
    dataOutputStream.writeInt(0); 
    dataOutputStream.writeInt(0); 
    dataOutputStream.writeInt(0); 
    dataOutputStream.writeInt(0); 
    dataOutputStream.flush(); 
} 
+0

고맙습니다. Blackb Pearl. 귀하의 코드 작업. 한 번만 더 질문합니다. 내 앱을 설치하면 라디오 정보에 액세스 할 수있는 사용자 권한을 묻는 대화 상자가 나타납니다. ApplicationPermissions.PERMISSION_LOCATION_DATA를 추가했지만 여전히 동일한 대화 상자가 나타납니다. 대화 상자가 팝업되지 않게하려면 어떻게합니까? 많은 감사드립니다. –

+0

ApplicationPermissions.PERMISSION_LOCATION_DATA를 ApplicationPermissions.PERMISSION_LOCATION_API로 변경하십시오. – Signare

+0

확인해 보겠습니다. –

관련 문제