2011-09-05 56 views
1

我正在开发一个小应用程序,我们的其中一个要求是当他做某项特定活动时检查用户的物理位置(例如:只能在艾菲尔铁塔附近拍照)离线GPS坐标访问 - iPhone/Android

现在,我们很多智能手机用户可能会或可能没有数据访问。

当他离线时(没有3G/WiFi),是否可以获取用户的经度和纬度?

我猜iPhone上的地图应用程序使用数据连接只是为了渲染底层Google地图,而iPhone OS仍然可以访问设备的GPS坐标。请让我知道如果我是对还是错..

我想学习其他OS'es相同,例如:Android。任何链接/引用将不胜感激。

更新:我知道GPS是基于卫星的技术,因此我想它应该与互联网连接没有直接关系。

+0

您应该记住iOS(和大多数Android手机)使用A-GPS(辅助GPS),实际上它需要网络连接。没有网络连接,可能需要一些时间以合理的准确度返回一个位置。 – lxt

+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 

我们推荐抛出的第一个结果了,因为他们可能是旧的缓存数据。同时检查准确性,确保你在这里获得好的结果。

参考:

欲了解更多信息请查看thisthis文档。

另请参阅苹果示例代码Locations

+1

恩,谢谢Braintiff !!!我现在只需要移动设备的经纬度。从[Lat,Lon]到[街道地址]的人类可读转换将由我的服务器后端完成 - 只要用户获得Internet连接并准备好与我们的服务器同步,就会启动。大!非常感谢! –

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; 
} 
+0

感谢Mosh,我的问题是,它会脱机工作吗? (没有互联网连接?) –

+0

因为我知道它应该工作,'lm.getProviders(false);''false'也意味着离线提供者,它'真正'意味着只在线 –

+0

你不需要互联网使用GPS! –