2

閉じているアプリケーションに位置認識を追加することは可能ですか?

たとえば、アプリケーションが閉じられたときに機能し、ユーザーがエリアに到達したときにローカル通知をユーザーにプッシュする近接サービスを作成したいと考えています。

CLRegion を使用すると、同様の結果を得ることができますが、アプリケーションがアクティブな場合 (またはバックグラウンドの場合) に限られます。

ユーザーの場所によってアクティブ化されるリモート通知サービスに似たものが必要です。しかし、それは本当に奇妙に聞こえます。iOSで同様のサービスを利用することは可能ですか?

4

3 に答える 3

2

2 つのオプションがあります。

1 つは、John が前述した重要な場所の変更サービスです。もう一つは、startRegionMonitoring

両方とも、AppleのLocation Awareness Documentationで説明されています。

どちらも終了した (閉じた) アプリを一瞬開くことができ、ローカル プッシュ通知を配信してユーザーに警告することができます。アプリは通常の状態にはなりませんが、ユーザーが通知をクリックするとアプリが開くので、目的を達成できます。

didFinishLaunchingWithOptions デリゲートでイベントをインターセプトし、ローカル通知を発生させるサンプル コードを次に示します。通常、ここで通知を送信するのではなく、ロケーション マネージャーを再初期化して、新しい位置を取得し、ユーザーが入力したエリアのメッセージ (ローカル通知) を表示する必要があります...

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //see if application was launched from a location event!
    if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) {
        //if so, we need to reinitialize our location manager!
        [[LocationManager sharedLocationManager] startSignificantLocationMonitoring];
        //fire a notification

        UILocalNotification *notification = [[UILocalNotification alloc] init]; 
        notification.fireDate = [NSDate date]; 
        NSTimeZone* timezone = [NSTimeZone defaultTimeZone]; 
        notification.timeZone = timezone; 
        notification.alertBody = @"app did wake up"; 
        notification.alertAction = @"OK"; 
        notification.soundName = @"yes.caf"; 
        [[UIApplication sharedApplication] scheduleLocalNotification:notification];

    }
}
于 2012-07-30T22:07:56.937 に答える
2

SignificantChange API を使用して、システムによって閉じられた (またはクラッシュした) アプリを起動できると思います。ただし、実際に必要なものに近い可能性があるため、地域の監視を検討する必要があります。

リンクは次のとおりです

および関連するセクション:

更新が発生したときにアプリが中断された場合、システムは更新を処理するためにバックグラウンドでアプリを起動します。アプリがこのサービスを開始して終了した場合、新しい場所が利用可能になると、システムはアプリを自動的に再起動します。このサービスは iOS 4 以降で利用でき、セルラー無線を搭載したデバイスでのみ利用できます。

CLLocationManager をセットアップするときは、呼び出すだけです

- (void)startMonitoringSignificantLocationChanges

デリゲート コールバックとして一般的な方法でイベントを処理します。

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

アプリが終了した場合は、アプリのデリゲートへのコールバックも取得することに注意してくださいメソッドの起動が完了しました。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

また、この場合のコールバックには、場所の更新の結果として起動されたことを通知するフラグが含まれていると確信しています。

于 2012-07-30T21:55:50.070 に答える
0

iOS の閉じたアプリケーションからは何もできないと思います。バックグラウンド(非アクティブ状態)からできることは非常に限られていますが、閉じたアプリケーションからできることは何も知りません。とにかく実行していないときにアプリが何ができるかは本当にわかりません;-)。

于 2012-07-30T20:30:38.723 に答える