öldürüldüğünde bir iOS uygulaması için konum alma Uygulamam etkinken ve etkin değilken ve öldürüldüğünde kullanıcının uygulamasının konumunu alması gerekir. Kullanıcının bulunduğu yer bir mağazaya yakın olduğunda, uygulama yerel bir bildirim göndermelidir.Arka planda olduğunda ve hatta
Tam olarak neler olup bittiğinden emin değilim, ancak uygulamamın arka planda konumu almasını ve öldüğünde onu uyandırmasını sağlayamıyorum.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//The app has been killed/terminated (not in background) by iOS or the user.
if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]){
_locationManager = [CoreLocationManager sharedInstance];
_locationManager.isAppActive = NO;
_locationManager.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
_locationManager.locationManager.activityType = CLActivityTypeOtherNavigation;
if ([_locationManager.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[_locationManager.locationManager requestAlwaysAuthorization];
}
[_locationManager addLocationManagerDelegate:self];
}
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if (_locationManager.locationManager){
_locationManager.isAppActive = YES;
[_locationManager.locationManager stopMonitoringSignificantLocationChanges];
}
_locationManager = [CoreLocationManager sharedInstance];
if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[_locationManager.locationManager requestAlwaysAuthorization];
}
if ([_locationManager.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[_locationManager.locationManager requestWhenInUseAuthorization];
}
[_locationManager addLocationManagerDelegate:self];
[_locationManager.locationManager startUpdatingLocation];
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
_locationManager.isAppActive = NO;
if (_locationManager.locationManager){
[_locationManager.locationManager stopUpdatingLocation];
[_locationManager.locationManager stopMonitoringSignificantLocationChanges];
}
if ([_locationManager.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[_locationManager.locationManager requestAlwaysAuthorization];
}
[_locationManager.locationManager startMonitoringSignificantLocationChanges];
}
: Yaptığım şey olduğunu
I (boths durumlarda whenInUse ve Always için kullanılan singleton) bir konum yöneticisi var ve ben NSLocationAlwaysUsageDescription ve NSLocationWhenInUseUsageDescription hem .plist
tanımladığınız Yanlış bir şey mi yapıyorum? Geofencing kullanmak için kesinlikle gerekli olup olmadığından emin değilim, ama startMonitoringSignificantLocationChanges ile okudum şeyler için yeterlidir.
Teşekkürler Utsav !! ApplicationDidEnterBackground öğesinin locationmanager kodunu nereye eklemek zorundayım? – Stacky
@Stacky didEnterBackground kodunuz gerekli olmayacaktır. Sürekli konum güncellemelerine ihtiyacınız olduğu için stopUpdatingLocation'ı aramanız gerekmez. Eğer UpdatingLocation'ı durdurmayı bırakırsanız, kullanıcı konum güncellemelerini almayı durduracaktır. Kullanıcı sadece uygulamadan çıkış yaptığında bunu yapmalısınız –
Eğer aptal bir şey @utsav soruyorsam özür dilerim, ama stopUpdatingLocation (uygulama çalışırken kullanılır) çağırmak ve sonra startMonitoringSignificantLocationChanges çağrısı yapmak gerekli değil mi? – Stacky