4

OS 5 以降の GPS から地理位置情報を取得しました。

ネットワークから位置情報を取得する必要があります。GPS が無効になっている場合、OS 5 のネットワークから地理位置情報を収集する必要があります。

この BlackBerry ドキュメントを確認しました。

OS 6以降のソリューションを提供します。

ブラックベリー OS 5 で GPS なしで地理位置情報を取得できますか?

4

2 に答える 2

2

これを試して -

try {

    int cellID = GPRSInfo.getCellInfo().getCellId();
    int lac = GPRSInfo.getCellInfo().getLAC();

    String urlString2 = "http://www.google.com/glm/mmap";
    if ((WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED)
            && RadioInfo
                    .areWAFsSupported(RadioInfo.WAF_WLAN)) {
        urlString2 += ";interface=wifi;ConnectionTimeout=60000";
    }else  if (TransportInfo.isTransportTypeAvailable(TransportInfo.TRANSPORT_BIS_B) && TransportInfo.hasSufficientCoverage(TransportInfo.TRANSPORT_BIS_B)) {
        System.out.println("BIS CONNECTION-------------------");
        // Holder.connectionInterface=";deviceside=false;ConnectionType=mds-public";
        urlString2 += ";deviceside=false;ConnectionType=mds-public;ConnectionTimeout=60000";
    } 


    // 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();
}
于 2013-06-19T06:17:47.670 に答える
1

@Signare の回答に加えて、OS 5.0 以降で利用可能な Simple Location APIを使用することもできます。

github からソース コードをダウンロードし、プロジェクトに含めます。

次に、GPS を使用せずに位置情報を取得するには、次のことを試してください。

 try {
    simpleProvider = new SimpleLocationProvider(SimpleLocationProvider.MODE_GEOLOCATION);
 } catch(LocationException le){ 
    // thrown if the selected mode (in this case MODE_GEOLOCATION) is not available.
 }
 BlackBerryLocation location = simpleProvider.getLocation(120); // 120 seconds timeout

指定した間隔で位置データを使用してコードをコールバックする場合は、 SimpleLocationListenerインターフェイスを使用することもできます。

OS 6.0 では、この API により、セル ネットワークをロケーション プロバイダーとして具体的に選択するか、Wi-Fi ネットワークを使用する機能が追加されます。OS 5.0 では、次の 3 つの選択肢に制限されています。

MODE_GEOLOCATION - Geolocation モードで厳密に動作します。
MODE_GPS - GPS (別名スタンドアロン/自律) モードで厳密に動作します。
MODE_OPTIMAL - 可用性に基づいて、地理位置情報モードと GPS モードの両方で動作します。

ただし、MODE_GEOLOCATIONまたはMODE_OPTIMALを使用すると、GPS チップを使用せずに位置情報を取得できます。

于 2013-06-20T00:56:00.380 に答える