我已经从 GPS 获得了 OS 5 及更高版本的地理位置。
我需要从网络获取地理位置。如果 GPS 被禁用,我需要为 OS 5 从网络收集地理位置信息。
我检查了这个 BlackBerry 文档。
他们为 OS 6 及更高版本提供了解决方案。
我们可以在没有 GPS 的情况下为 blackberry OS 5 获得地理定位吗?
我已经从 GPS 获得了 OS 5 及更高版本的地理位置。
我需要从网络获取地理位置。如果 GPS 被禁用,我需要为 OS 5 从网络收集地理位置信息。
我检查了这个 BlackBerry 文档。
他们为 OS 6 及更高版本提供了解决方案。
我们可以在没有 GPS 的情况下为 blackberry OS 5 获得地理定位吗?
试试这个 -
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 中,您只能选择以下三个选项:
MODE_GEOLOCATION - 在地理定位模式下严格操作。
MODE_GPS - 在 GPS(又名独立/自主)模式下严格运行。
MODE_OPTIMAL - 根据可用性在地理位置和 GPS 模式下运行。
但是,使用MODE_GEOLOCATION
orMODE_OPTIMAL
将允许您在不使用 GPS 芯片的情况下获得位置修复。