2016-03-28 9 views
0

iPhoneからのオーディオを録音するiOSコードの機能があります。WatchKitボタンを使用してiPhoneから録音する

WatchKitアプリからボタンを押した後に録画を開始したいと思います。録音は電話ではなく、リンゴの時計で行われます。

WatchKitで次のコードを使用してiPhoneに信号を送信して録画を開始します。

[self.session sendMessage:@{"command": "start"} replyHandler:nil errorHandler:nil] 

iOSコードには次のハンドラがあります。

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

WatchKitからコマンドを受け取ると、私はiOSコードで記録機能を呼び出しました。

正常に実行されます。ただし、出力ファイルは空で、データ長は0です。

これは可能ですか?またはWatchKitから別途録画する必要がありますか?

ありがとうございました。

+0

アプリがフォアグラウンドでのみ録音できるのは、おそらく許可の問題です。 watchOSの 'sendMessage'は、iOSアプリをフォアグラウンドに持ち込みません。 iOSアプリでオーディオをフォアグラウンドまたはバックグラウンドで録音していますか? –

+0

@ PetahChristian、私のアプリは今バックグラウンド録音しています。私はWatchKitを押したときに赤いダブルステータスバーを見ることができます。しかし、私のファイルのデータ長はまだゼロです。ありがとう... – moeseth

+0

@PetahChristian、私はそれを解決することができました。バックグラウンドスレッドから関数を呼び出しているからです。 GCDを使用してメインスレッドから呼び出して解決しました。ありがとう。 – moeseth

答えて

0

WCSessionの機能性は、メッセージパッシングシステムだけです。 iPhoneアプリケーションがメッセージを受信すると、iPhoneアプリケーションは通常実行できるすべてのコードを実行できます。あなたが正常にメッセージを受信して​​いることを示すので、問題はWCSessionコードではありません。ただし、アプリケーションが受け取ったすべてのメッセージは、バックグラウンドスレッドでセッションデリゲートにシリアルに配信されることに注意してください。上記のコメントは、特定のユースケースでは、これを認識することが、あなたが開始する予定のプロセスがメインスレッド上にあることを確認する上で重要であることを示しています。

要するに、あなたの質問で提起された特定の質問に答えるために、はい、Apple Watchのボタンを使ってiPhoneでレコーディングを開始できます - ボタンがタップされた時点でiPhoneアプリが実行されているWCSessionプロトコルの前提条件です。

あなたがまだこれを持っていない場合は、WatchKit App Extension内のif (session.reachable)をチェックし、そうでない場合はボタンを無効にし、セッションの到達可能性についての通知を登録することですボタンを再度有効にできるように変更されます。

関連する問題