2012-10-16 58 views
0

在我的應用程序中,我使用CLLocation管理器來查找當前位置。根據當前位置,我想在我的位置獲得日出和日落時間。當前時間等於日出時間時觸發報警,即使在後臺應用程序

例如: 如果當前位置是舊金山,然後日出時間和日落時間是在舊金山的人。直到這一點,我成功了。 但是,如果當前時間等於日出時間,即使當我的應用程序處於後臺時,我也想每天觸發一次鬧鐘。

我搜索了很多方法,但沒有一個人滿意我。我是iOS開發新手。

applicationDidEnterBackground方法在終止應用程序之前運行一段時間。

+0

這是不可能的。請參閱http://stackoverflow.com/a/9621425/908621以獲取部分答案。 – fishinear

回答

2

您可能希望在plist中設置背景位置模式,以使其即使在背景中也能對位置更新作出響應。然後在位置更新回調中獲取日落時間並在當時通知本地通知。

而且它的尤爲明顯,以管理通知和禁用那些不恰當的(改變位置=>新通知)。

更新: 在您的特定情況下,不需要連續的位置數據流,重要的位置變化跟蹤將會很好。這種方法不需要plist所要求的背景定位模式,並且不會以光速耗盡電池。你可以在這裏找到信息:- (void)startMonitoringSignificantLocationChanges。 請注意,即使背景位置模式應用程序沒有在後臺連續運行,它只會被調用來執行位置更新回調。

所以一開始你:

[locationManager startMonitoringSignificantLocationChanges]; 

然後在位置更新回調您:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    // check location 
    // get time of sunset 

    // schedule UILocalNotification 
} 

剛剛找到了一篇文章給你:Setting a reminder using UILocalNotification in iOS 4. Objective-C.同時檢查:Executing code in background +schedule alarm on date

+0

我已經閱讀了關於背景位置mode.i嘗試但沒有成功。你可以發佈一個小例子this.i將非常感謝you.and在這種情況下是對電池消耗的任何影響,因爲應用程序將連續運行回地面。 – ram880

+0

檢查我的更新 –

0

Android Awareness APIrecently announced新功能爲您的用例提供了一個簡單的解決方案。實現你想要做的事情的方法是創建並註冊一個相對於日出/日落指定的TimeFence。

例如:

// Create TimeFence 
AwarenessFence sunriseFence = 
    TimeFence.aroundTimeInstant(TimeFence.TIME_INSTANT_SUNRISE, 
     0, 5 * ONE_MINUTE_MILLIS); 

// Register fence with Awareness. 
Awareness.FenceApi.updateFences(
    mGoogleApiClient, 
    new FenceUpdateRequest.Builder() 
     .addFence("fenceKey", sunriseFence, myPendingIntent) 
     .build()) 
    .setResultCallback(new ResultCallback<Status>() { 
     @Override 
     public void onResult(@NonNull Status status) { 
      if (status.isSuccess()) { 
       Log.i(TAG, "Fence was successfully registered."); 
      } else { 
       Log.e(TAG, "Fence could not be registered: " + status); 
      } 
     } 
    }); 

你會得到回調時柵欄在日出的計算結果爲TRUE,而當它日出後5分鐘評估回FALSE。

請檢查Fence API code snippets文檔瞭解如何添加自定義的應用程序邏輯。

相關問題