Watch aktualisieren obwohl App im Hintergrund ist

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Watch aktualisieren obwohl App im Hintergrund ist

    Ich fürchte, ich habe da ein konzeptionelles Problem.

    Ich versuche das mal zu erklären:

    Ich hab eine App in Objective-c für das iPhone.
    Die ermittelt Distanzen zu bestimmten Zielpunkten und gibt die in einem View aus. Das funktioniert hervorragend seit Jahren :thumbup:
    Jetzt hatte ich die Idee meine AppleWatch2 (4.3.1) mit den Distanzen (und ein paar weiteren Informationen zu versorgen. Das funktioniert auch hervorragend :thumbup:

    Aber leider nur, wenn die App auf dem iPhone im Vordergrund läuft. :whistling:

    In einem VC triggere ich das senden an die Watch mit:

    C-Quellcode

    1. - (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
    2. {
    3. [self updateBahn];
    4. }
    Wie bereits gesagt, funktioniert alles wunderbar, wenn ich das iPhone in der Hand halte und die App im Vordergrund läuft.

    Was muss ich machen, damit das iPhone in der Hosentasche die Watch aktualisiert wenn sich meine Position ändert?

    Bei Google Maps funktioniert das ja auch ...
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • MCDan schrieb:

    Muss man in der Info.plist für die Watch und/oder iPhone App evtl. in den UIBackgroundModes den Key location entsprechend setzen?

    XML-Quellcode

    1. <key>UIBackgroundModes</key>
    2. <array>
    3. <string>external-accessory</string>
    4. <string>location</string>
    5. </array>
    hab das so in meiner info.plist
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • Hast Du beim CLLocationManager auch die requestAlwaysAuthorization oder nur die requestWhenInUseAuthorization angefordert?

    Du könntest auch mal prüfen, ob allowsBackgroundLocationUpdates YES zurück liefert und ggf. auf YES setzen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MCDan ()

  • MCDan schrieb:

    Hast Du beim CLLocationManager auch die requestAlwaysAuthorization oder nur die requestWhenInUseAuthorization angefordert?

    C-Quellcode

    1. if (self.locationManager == nil)
    2. {
    3. self.locationManager = [[CLLocationManager alloc] init];
    4. if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
    5. {
    6. [self.locationManager requestAlwaysAuthorization];
    7. }
    8. self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    9. self.locationManager.delegate = self;
    10. }
    11. [self.locationManager startUpdatingLocation];
    Alles anzeigen
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • MCDan schrieb:



    Du könntest auch mal prüfen, ob allowsBackgroundLocationUpdates YES zurück liefert und ggf. auf YES setzen.


    C-Quellcode

    1. self.locationManager.allowsBackgroundLocationUpdates = YES;
    Das hatte ich nicht gesetzt. Bin mal gespannt, ob das schon hilft. Kann das leider erst später testen.
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • hape42 schrieb:

    C-Quellcode

    1. if (self.locationManager == nil)
    2. {
    3. self.locationManager = [[CLLocationManager alloc] init];
    4. if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
    5. {
    6. [self.locationManager requestAlwaysAuthorization];
    7. }
    8. self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    9. self.locationManager.delegate = self;
    10. }
    11. [self.locationManager startUpdatingLocation];
    Alles anzeigen
    Du solltest den Delegate vom CLLocationManager vor dem Aufruf von requestAlwaysAuthorization setzen, da die Methode den Delegate benötigt.
  • MCDan schrieb:

    Du solltest den Delegate vom CLLocationManager vor dem Aufruf von requestAlwaysAuthorization setzen, da die Methode den Delegate benötigt.

    C-Quellcode

    1. if (self.locationManager == nil)
    2. {
    3. self.locationManager = [[CLLocationManager alloc] init];
    4. self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    5. self.locationManager.delegate = self;
    6. if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
    7. {
    8. [self.locationManager requestAlwaysAuthorization];
    9. }
    10. }
    11. [self.locationManager startUpdatingLocation];
    12. self.locationManager.allowsBackgroundLocationUpdates = YES;
    Alles anzeigen
    Hat das Problem leider noch nicht gelöst
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • Denke ich überhaupt richtig?

    Wenn die App im Hintergrund ist, sollen weiterhin bei Standortänderung Texte an die Watch gesendet werden.

    ?( Kann mir mal jemand sagen, ob das im Prinzip so gehen kann? Oder ob ich auf dem Holzweg bin ?(
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • hape42 schrieb:

    MCDan schrieb:

    Du solltest den Delegate vom CLLocationManager vor dem Aufruf von requestAlwaysAuthorization setzen, da die Methode den Delegate benötigt.

    C-Quellcode

    1. if (self.locationManager == nil)
    2. {
    3. self.locationManager = [[CLLocationManager alloc] init];
    4. self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    5. self.locationManager.delegate = self;
    6. if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
    7. {
    8. [self.locationManager requestAlwaysAuthorization];
    9. }
    10. }
    11. [self.locationManager startUpdatingLocation];
    12. self.locationManager.allowsBackgroundLocationUpdates = YES;
    Alles anzeigen
    Hat das Problem leider noch nicht gelöst
    Ups, sorry. Dieser Tipp wird auch nicht zur Lösung des eigentlichen Problems beitragen, sondern soll nur evtl. Probleme beim Aufruf von requestAlwaysAuthorization verhindern, wenn der Delegate noch nicht gesetzt ist. ;)