GEOリマインダー(iOS5で追加されたもの、出発/到着時に場所で通知する)を使用するアプリについて考えています。しかし、この機能を使用して (実際には場所のみを使用して) 現在の場所を取得し、アプリで定義された場所と比較して、同じ場所かどうかを確認する必要があります。現在の場所と定義された場所が同じ場合、アプリを起動します。
これは可能ですか?
私の目的を理解していただければ幸いです。前もって感謝します
GEOリマインダー(iOS5で追加されたもの、出発/到着時に場所で通知する)を使用するアプリについて考えています。しかし、この機能を使用して (実際には場所のみを使用して) 現在の場所を取得し、アプリで定義された場所と比較して、同じ場所かどうかを確認する必要があります。現在の場所と定義された場所が同じ場合、アプリを起動します。
これは可能ですか?
私の目的を理解していただければ幸いです。前もって感謝します
バックグラウンドから現在地を監視できますが、アプリが自動的に起動されるわけではないことに注意してください。ローカル通知などを使用して、ユーザーにアプリを開くように促すことができます。ただし、バックグラウンドから自動的に起動することはできません。少なくとも App Store で承認されたオプションではありません。
監視する領域を設定すると、現在の領域と定義された領域のチェックが自動的に行われます。始めるのに最適な場所はCLLocationManagerDelegate
、特にのドキュメントを読むことstartMonitoringForRegion:
です。あなたがやりたいことは「ジオフェンシング」と呼ばれています。詳細については、位置認識ガイドも参照してください。
iPhone開発は初めてなので、アプリをプログラムで起動する方法はわかりませんが、事前定義された場所に到着したときのトリガーを手伝うことができます. これがコードです。
1: CoreLocation.framework をインポートする
2: viewController.h ファイル内のコードの下に配置
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
@interface ViewController : UIViewController<CLLocationManagerDelegate>
@end
3: inviewController.m
#import "ViewController.h"
@interface ViewController (){
CLLocationManager *locationManager;
CLRegion *mexicoBoundary;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[locationManager setDistanceFilter:kCLDistanceFilterNone];
CLLocationCoordinate2D regionCords ;
//19.432608,-99.133208 lat, lon for mexico city
regionCords=CLLocationCoordinate2DMake(19.432608,-99.133208);
//5000 below, is in meters-radius
mexicoBoundary =
[[CLRegion alloc]initCircularRegionWithCenter:regionCords
radius:5000.0
identifier:@"mexico_Day"];
[locationManager startMonitoringForRegion:mexicoBoundary];
}
-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
NSLog(@"%@: %@", @"region entered", region.identifier);
}
-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
NSLog(@"%@: %@", @"region exited", region.identifier);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end