2017-04-01 2 views
0

Ich begann heute mit dem Watch OS Framework rumzualbern und wollte eine schnelle App zusammenwerfen, bin aber zu ein paar Fragen gekommen.Refreshing Watch App von Watch

Ich machte eine iOS App, die nur die aktuelle Batterie% sowie den Zustand der Batterie zeigt. Das wollte ich dann auf der Uhr zeigen.

  1. Nur wenn ich die iOS-App vollständig schließe, öffne ich sie, während die Watch-App aktiv ist. Wie kann ich meine Watch-App aktualisieren, wenn ich sie nach dem Öffnen der iOS-App öffne?

  2. Diese Art von geht mit Nummer 2. Aber wie kann ich die Watch App erlauben, Informationen aus der iOS App zu holen, nachdem es im Hintergrund war? Nehmen wir als Beispiel an, dass die iOS-App im Hintergrund war und ich den Akku% abrufen wollte, ohne die iOS-App in den Vordergrund zu bringen.

Einige Neben Hinweisen, wie ich dies einrichten -

Innerhalb des iOS-App, in der viewDidLoad Methode, beginne ich meine Sitzung.

Dann rufen Sie meine Methode, um die tatsächliche Batterie% und Zustand zu aktualisieren Innerhalb dieser Methode habe ich diese, die die Informationen über auf die Uhr sendet:

NSDictionary *message = @{ 
          @"message" : [NSString stringWithFormat:@"%@", [numberFormatter stringFromNumber:levelObj]], 
          @"message_2" : [NSString stringWithFormat:@"%ld",(long)[UIDevice currentDevice].batteryState], 

          }; 


[wcSession sendMessage:message replyHandler:nil errorHandler:^(NSError * _Nonnull error) { 
    NSLog(@"%@", error.localizedDescription); 
}]; 

ich diese gleiche Methode aufrufen, auch im viewDidAppear, so habe ich nicht die App komplett neu starten, um erfrischend von der zu erlauben Gegenstück ansehen.

Auf der Uhr Seite habe ich die viewWillActivate Methode mit der gleichen Aktivierung wie die iOS-Seite sowie die Methode zu behandeln, was die Watch-App von der iOS-Seite erhält. Aber es wird nur aktualisiert, wenn ich die iOS App vollständig neu starte.

- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message { 

    NSLog(@"Message recieved!"); 
    [_batteryLevelLabelW setText:message[@"message"]]; 
} 

Auch darin ist der Code, um die Batteriezustandsmeldung zu behandeln, die ein bisschen lang ist.

Ich hoffe, ich habe eine gute Menge an Informationen zu helfen.

Antwort

0

Nach documentation:

Mit send​Message(_:​reply​Handler:​error​Handler:​) oder send​Message​Data(_:​reply​Handler:​error​Handler:​) Methode Übertragungsdaten zu einem Gegenstück erreichbar. Diese Methoden sind für die sofortige Kommunikation zwischen Ihrer iOS-App und WatchKit Extension vorgesehen. Die is​Reachable-Eigenschaft muss aktuell für diese -Methoden erfolgreich sein.

Wenn watchapp nicht Vordergrund ist, wird die Nachricht nicht übermittelt, da isReachable falsch ist.

Methode, die Sie verwenden sollten, ist update​Application​Context(_:​) - es wird warten, bis Watch App im Vordergrund geöffnet wird und nur dann geliefert wird.

+0

Vielen Dank für Ihre Antwort. Was ist, wenn die iOS-App noch nicht geöffnet wurde? Wie würde das aktualisiert und dann an die Watch-App gesendet, wenn "isReachable" wahr ist. – Michael

+0

@Michael, wenn die ios App noch nicht geöffnet wurde, wie wird der Akkustand erreicht? – abjurato

+0

Das ist mein schlechtes. Sollte das anders formuliert haben. Gibt es eine Möglichkeit, den Akkuladestand zu aktualisieren, wenn die Watch-App eine Nachricht sendet, in der nach Informationen gefragt wird? Oder müsste ich unbedingt zuerst das iOS öffnen? – Michael