2015-05-04 2 views
2

Я знаю, что из приложения «Наблюдение» мы можем разбудить приложение-хост с помощью openParentApplication(userInfo:reply), но есть ли способ узнать, работает ли в настоящее время хост-приложение перед вызовом openParentApplication?Возможно ли из приложения Apple Watch узнать, находится ли приложение-хост на переднем плане?

Спасибо!

ответ

0

Вы можете отслеживать NSExtensionContextnotifications, но вы не знаете, какое состояние запускает приложение-хост при запуске приложения для часов.

Вы можете поместить флаг в NSUserDefaults и изменить его флаг в приложении applicationWilllEnterForeground, applicationDidEnterBackground и так далее. Затем разделите значения по умолчанию, как описано в разделе App Extension Programming Guide.

Если это кажется странным способом использования NSUserDefaults, вам нужно что-то сделать с уведомлениями Darwin. MMWormhole построен на основе материалов Дарвина и отлично подходит для многих людей.

Короткий ответ: выберите способ связи между приложением-хозяином и часами, который не полагается на ответ openParentApplication &, а затем просто укажите информацию о статусе ретранслятора хоста для приложения часов.

0

openParentApplication не приведет ваше приложение для iPhone в активное состояние. Поэтому простым способом было бы вызвать openParentApplication. В этом методе, просто возвращает следующую BOOL, поместив его в NSDictionary, который возвращается с ответом():

(application.applicationState == UIApplicationStateActive) 
0

Вы можете вызвать openParentApplication:reply: метод в часы контроллера для отправки запросов в том, что приложение и получить ответ.

Когда вы вызываете метод openParentApplication:reply:, iOS запускает или запускает содержащее приложение iOS в фоновом режиме и вызывает метод делегата приложения application:handleWatchKitExtensionRequest:reply:. Делегат приложения выполняет запрос, используя предоставленный словарь, а затем возвращает ответ на расширение WatchKit. Вы можете прочитать дополнительную информацию here.

В AppDelegate

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply { 
    let state = UIApplication.applicationState 
    let replyDict = ["appState" : state] 
    reply(replyDict) 
} 

В WatchController

WKInterfaceController.openParentApplication(dictionary) { 
     (replyDict, error) -> Void in 
    //You will get the replyDict here, which contains application state. 
} 

Надеется, что это помог.

+0

круто спасибо! Я задал вопрос, откуда возникает переменная «ошибка» в методе openParentApplication? Это не передается блоком handleWatchKitExtensionRequest, поэтому мне интересно, как это происходит. –

+0

«error» - это объект NSError, указывающий, возникла ли проблема или нет, если не было ошибок. Я понял, когда сторожевой таймер не может открыть родительское приложение, он получает NSError. Я не могу найти подробностей. – cheeseRoot

Смежные вопросы