我正在开发一个小应用程序,我们的一个要求是在他进行特定活动时检查用户的物理位置(例如:图片必须仅在艾菲尔铁塔附近拍摄)
现在,很多智能手机用户可能会或者可能不会立即拥有数据访问权。
离线时是否可以获取用户的纬度和经度(无3G / WiFi)。???
我猜iPhone上的地图应用程序仅使用数据连接来呈现基础Google地图,而iPhone OS仍然可以访问设备的GPS坐标。如果我对或错,请告诉我。
我想了解其他操作系统,例如:Android。任何链接/参考将非常感激。
更新:我知道GPS是一种基于卫星的技术,因此我猜它应该与互联网连接没有直接关系。
答案 0 :(得分:1)
你是对的! 要获得纬度和经度信息,设备使用GPS硬件。 这是在没有互联网连接的情况下完成的。你需要的是GPS信号!但是,如果您在通常没有良好GPS信号的建筑物内,iPhone会尝试使用周围的3G和WIFI网络来定位设备。
如果您想要显示该坐标,例如谷歌地图,您需要互联网连接,以根据您获得的坐标加载地图。此外,为了检索诸如地址,街道等信息,设备需要访问因特网以在数据库中搜索这种信息。
适用于iOS的示例:
拳头导入#import<CoreLocation/CoreLocation.h>
给你.h文件。
然后基本上你需要CLLocationManager
。
- (IBAction)startSearchingLocation:(id)sender
{
//locationManager is ivar of CLLocationManager
self.locationManager = [[CLLocationManager alloc] init];
//release it when you stop the location manager!
// make self the delegate of the location manager
[locationManager setDelegate:self];
//Note that this settings will have a huge impact on battery life!
[locationManager setDistanceFilter:kCLDistanceFilterNone];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
//And finally start the location manager.
[locationManager startUpdatingLocation];
}
位置管理器将开始向委托方法发送位置信息 称为:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
建议抛弃最初的结果,因为它们可能是旧的缓存数据。还要检查准确性,以确保在这里获得良好的结果。
<强>参考文献:强>
另请参阅名为Locations
的Apple示例代码。
答案 1 :(得分:0)
那个代码适用于android
private double[] getGPS() {
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
List<String> providers = lm.getProviders(false);
/* Loop over the array backwards, and if you get an accurate location, then break out the loop*/
Location l = null;
for (int i=providers.size()-1; i>=0; i--) {
l = lm.getLastKnownLocation(providers.get(i));
if (l != null) break;
}
double[] gps = new double[2];
if (l != null) {
gps[0] = l.getLatitude();
gps[1] = l.getLongitude();
}
return gps;
}