2017-04-01 69 views
0

今天我開始討論Watch OS的框架,想要將一個快速應用程序放在一起,但遇到了一些問題。從手錶刷新手錶應用程序

我做了一個iOS應用程序,只顯示當前的電池%以及電池的狀態。然後我想在手錶上顯示。

  1. 唯一的一次手錶應用程序將更新是當我完全關閉iOS應用程序,然後打開它,而手錶的應用程序被激活。如果我在打開iOS應用程序後打開它,我如何允許更新我的手錶應用程序?

  2. 這種伴隨着數字2.但我怎麼讓手錶應用程序獲取信息從iOS應用程序,它已經在後臺?舉個例子,假設iOS應用程序已經在後臺,我想在不打開iOS應用程序前臺的情況下獲取電池電量。

我如何設置這部分旁註 -

在iOS應用程式,在viewDidLoad方法,我開始我的會議。

if ([WCSession isSupported]) { 
    wcSession = [WCSession defaultSession]; 
    wcSession.delegate = self; 
    [wcSession activateSession]; 
} 

然後打電話給我的方法來更新電池實際%和狀態。在該方法中,我有這個發送該信息到手錶:

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); 
}]; 

我還呼籲在viewDidAppear此相同的方法,所以我沒有完全重新啓動應用程序,允許的清爽觀看對方。

在手錶方面,我有viewWillActivate方法使用與iOS端相同的激活方法,以及處理手錶應用程序從iOS端接收的方法。但它只會在我完全重啓iOS應用程序時更新。

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

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

此外,還有處理電池狀態消息,這是有點長的代碼。

我希望我提供了大量的幫助信息。

回答

0

根據documentation

使用send​Message(_:​reply​Handler:​error​Handler:​)send​Message​Data(_:​reply​Handler:​error​Handler:​)方法 將數據傳輸到一個可到達對方。這些方法旨在 用於您的iOS應用程序和WatchKit 擴展之間的即時通信。對於這些 方法,is​Reachable屬性目前必須成功。

如果watchapp不是前臺,由於isReachable爲假,所以不會傳送消息。

您應該使用的方法是update​Application​Context(_:​) - 它將等待,直到觀看應用程序將在前臺打開,然後纔會被傳遞。

+0

感謝您的回覆。如果iOS應用尚未打開,該怎麼辦?如何刷新,然後在'isReachable'爲true時發送到手錶應用程序。 – Michael

+0

@Michael如果ios應用尚未打開,你將如何獲得電池電量? – abjurato

+0

這是我的不好。應該有不同的意思。有沒有辦法刷新電池電量,如果手錶應用程序發送一條消息詢問信息?或者我肯定會首先打開iOS嗎? – Michael

相關問題