2014-04-01 44 views
0

我想檢查用戶每20米用戶的當前位置move.All處於活動狀態和背景。我知道它可以在active狀態下執行它。但我想知道的是它可以做同樣的事情在iOS中的背景模式。特別想知道的是蘋果拒絕這種方法。但在ios7我認爲它確定可以在後臺運行CLLocationManager

其實我想要做的醋栗位置,如果用戶移動超過1公里呼叫服務API,如果用戶每隔20m檢查本地數據庫,會彈出一些數據。

所有我想要在活動狀態和背景狀態下進行。 目前我正在使用重要的位置變化和區域監測。但區域監測的準確性較低。我想要最低20米的準確度。 這就是爲什麼我試着做上面的方法。我知道這種方法給電池大量消耗。但我想要最好的準確性。 任何人都有想法。

回答

2

您可以獲取用戶當前位置活動狀態和背景狀態應用程序都不會被拒絕。 在plist中,您需要設置獲取用戶位置在後臺狀態的請求。一旦設置完畢,您的位置管理員代表將繼續呼叫(因爲這有很多機會快速讓電池耗盡)將您的位置管理器方法寫入一個類/應用程序門並重新使用它們,以便您可以輕鬆地檢查狀況(何時以往用戶移動它會自動更新用戶的位置,這樣你可以檢查距離的兩個點之間,如果用戶達到腹脹,那麼你可以提示警報)

希望這將有助於..

+0

目前我使用singleton類的位置管理器。當用戶啓動updatelocation管理器時,它應該每天工作在後臺狀態。不要停止它。我想問的一件事可以在設置代理後更改所需的準確度。因爲有時候位置更新的距離可能會改變。然後我可以節省能源。我的大問題是電池。另一件事我聽到有些時候位置管理員在後臺模式下自動暫停 – mychar

+0

一旦我們在位置管理器中設置了位置管理器的請求不會在後臺模式下自動暫停(我用它來做我的一個應用程序)。正如你所說,你使用singleton類的位置管理器在這裏位置將更新沒有問題。如果你想改變desiredAccuracy,那麼把它保存在一個共享的地方,你可以從你的應用程序的任何部分訪問和設置值,所以一旦你改變了它會自動更新的地方。 –

+0

好的,謝謝電池它的呼叫位置管理器每20米用戶移動 – mychar

1

在AppDelegate.m文件

- (void)applicationDidEnterBackground:(UIApplication *)application{ 
    UIApplication* app = [UIApplication sharedApplication]; 
    UIApplication *bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
     [app endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     NSTimer* t = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(al) userInfo:nil repeats:NO]; 
     [[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode]; 
     [[NSRunLoop currentRunLoop] run]; 
    }); 
} 
-(void)al{ 
    yourViewController *navigation=[[yourViewController alloc]initWithNibName:@"yourViewController" bundle:nil]; 
    [navigation.locationManager startMonitoringSignificantLocationChanges]; 
} 

請嘗試以下鏈接: here