2016-04-07 13 views
-1

私は、各地域が店舗を表すいくつかの地域(ジオフェンシング)を監視するアプリを持っており、店に近づくとユーザーに通知します。locationManager:didEnterRegion:場所変更なしで起動

何らかの理由で、ユーザーが既に地域のサークル内にいる場合、約20分ごとに通知が送信されます。

すべてうまくいきますが、ユーザーが地域内に長時間いると、彼は地域を出るまでアプリに通知し続けます。

なぜそれが起こっているのですか?ありがとうございました!

+0

あなたがdidExitRegionを得るまでの更新プログラムをについてを停止する方法? – HardikDG

+0

これ以上のコードを追加できる場合は – Shreyank

+0

@Pyro店舗の監視を停止すると「didExitRegiin」は呼び出されません –

答えて

1

locationManagerを作成し、startUpdatingLocationを呼び出すと、シミュレータまたはデバイスの座標を連続的に与えるようになります。座標の値にはわずかな違いがあります。 stopUpdatingLocationを呼び出す必要があります。

For your case you need to stopUpdatingLocation when user exist the region or you can record the last location like this: 


-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 


CLLocation *newLocation = [locations lastObject]; 
[locationManager stopUpdatingLocation]; 

} 
+0

私は有意なロケーションの変更 –

1

同じことが起こっています。領域座標を追跡するだけで、新しい座標が来たら、新しい座標が現在の領域と '大きく異なる'かどうかを判断する方法があります。そうでない場合、無視します。そうであれば、次に適切な行動をとる。私はそれが助けて欲しい!ここで

* UPDATE *

は、私たちが行動を起こすのに十分な変更があったと判断する方法である:

- (BOOL) radiiAreSignificantlyDifferent:(CLLocationDistance) newRadius oldRadius:(CLLocationDistance)oldRadius 
{ 
    // radii are in kilometers 
    return (newRadius > oldRadius + 1.5 || newRadius < oldRadius - 1.5) ? YES : NO; 
} 

- (BOOL) locationsAreSignificantlyDifferent:(CLLocation*) newLocation oldLocation:(CLLocation*)oldLocation 
{ 
    BOOL different = NO; 

    if (oldLocation == nil) { 
     different = YES; 
    }else{ 
     // have we moved at least a quarter mile? 
     different = ([newLocation distanceFromLocation:oldLocation] > 400.0)? YES : NO; 
    } 

    return different; 
} 
+0

ちょっとブライアン、あなたの答えをありがとう。それがどう違うかどうかをどうやって確認できますか?この方法を投稿することは可能ですか?それは本当に役に立ちます!ありがとうございました! –

+0

お願いしますか?私は本当にそれが必要です –

+0

はい - 私は上記のアップデートとしてそれを追加します。それは非常に初歩的です。それが助けてほしい、遅れて申し訳ありません! –

関連する問題