2017-09-14 27 views
1

私は時計を介して私の親のアプリで画面上の特定のものを引き起こすことができる時計キットのアプリケーションのリモートコントロールのタイプを作りたいと思います。時計アプリが起動すると、アプリに接続していることを示すラベルが表示されます。WatchOS 3 - 親アプリがフォアグラウンドにあるかどうかをどのように伝えますか?

私はWCSessionを作成し、アプリがフォアグラウンドにあるかどうかを確認するメッセージをアプリに送信します。たとえアプリがバックグラウンドであっても、依然として応答を返します。私の腕時計アプリは、したがって、アプリが準備ができていると思います。

私は[UIApplication sharedApplication] .applicationStateをクエリしようとしましたが、これは常にnilとして戻ってきて、デバッグ中にUIApplicationがメインスレッドでのみ呼び出せるという警告を出しました。

私もopenparentapplication同様の機能を読むことは、それを行うための方法ですが、それは私は、アプリケーションがであること時計を伝えることが出来るのですかWatchOS 2または3

のよう信じて廃止されましたUIの要素を更新するために私のコマンドをアプリに送る安全を知っていますか?

答えて

1

私が知る限り、これにはデフォルトの方法はありません。

ただし、実現可能な方法の1つは、Watchアプリにメッセージを送信して、- (void)applicationDidBecomeActive:(UIApplication *)application;- (void)applicationWillResignActive:(UIApplication *)application;の両方から、時計アプリにiOSアプリを「リモートコントロールする」ことができるかどうかを知らせることです。

だからあなたWatchKitアプリで、あなたのiOSアプリ(isPhoneAppActiveのようなもの)の状態を保存するためにブール変数を宣言する必要がありますし、iOSアプリからこの変数の新しい値でWatchConnectivityフレームワークを使用してメッセージを送信します。 applicationWillResignActiveからfalseの値を送信し、applicationDidBecomeActiveからtrueを送信します。 isPhoneAppActive == trueの場合は、ウォッチアプリから「リモートコントロール」機能を呼び出すだけです。

もちろん、わずかな変更で同じ方法を使用できます。たとえば、電話アプリに他の多くの機能があり、ウォッチアプリが使用されていない状態でバックグラウンドモードに出入りすることが多いような場合は、iOSアプリ内にアプリケーションの状態を保存するのが適切ですWatchConnectivityフレームワークを使用してメッセージを送信し、iOSからの返信でアプリケーション状態を返信することによって、ウォッチアプリからこの格納された状態を確認してください。

+0

ちょうどこれを試して、すべてがうまくいった!簡単な質問ですが、WCSessionのisReachableプロパティも同じタスクを実行しますか? – SolidSnake4444

+0

いいえ、 'isReachable'は、iOSアプリがバックグラウンドで実行されていてもtrueを返します。 –