离线gps协调访问 - iPhone / Android

时间:2011-09-05 21:45:24

标签: iphone android ios blackberry mobile

我正在开发一个小应用程序,我们的一个要求是在他进行特定活动时检查用户的物理位置(例如:图片必须仅在艾菲尔铁塔附近拍摄)

现在,很多智能手机用户可能会或者可能不会立即拥有数据访问权。

离线时是否可以获取用户的纬度和经度(无3G / WiFi)。???

我猜iPhone上的地图应用程序仅使用数据连接来呈现基础Google地图,而iPhone OS仍然可以访问设备的GPS坐标。如果我对或错,请告诉我。

我想了解其他操作系统,例如:Android。任何链接/参考将非常感激。

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

2 个答案:

答案 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的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;
}