OS 5 以降の GPS から地理位置情報を取得しました。
ネットワークから位置情報を取得する必要があります。GPS が無効になっている場合、OS 5 のネットワークから地理位置情報を収集する必要があります。
この BlackBerry ドキュメントを確認しました。
OS 6以降のソリューションを提供します。
ブラックベリー OS 5 で GPS なしで地理位置情報を取得できますか?
OS 5 以降の GPS から地理位置情報を取得しました。
ネットワークから位置情報を取得する必要があります。GPS が無効になっている場合、OS 5 のネットワークから地理位置情報を収集する必要があります。
この BlackBerry ドキュメントを確認しました。
OS 6以降のソリューションを提供します。
ブラックベリー OS 5 で GPS なしで地理位置情報を取得できますか?
これを試して -
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();
}
@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 チップを使用せずに位置情報を取得できます。