2011-09-05 91 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! –