2016-10-25 12 views
0

ユーザーの移動方法(ウォーキング、サイクリング、運転など)を検出し、それぞれのアクティビティタイプに対して特定のUILocalNotificationを送信するアプリを開発したいと考えています。バックグラウンドでのユーザーの動きを検出することは可能ですか?

私の質問は:デバイスのバッテリーを消耗させることなく、バックグラウンドで(アプリが完全に閉じられているとき)検出することができますか?それを行う最善の方法は何でしょうか?

ありがとうございました!バックグラウンドタスクで扱うことができ、ユーザの活動について

+0

これはあなたを助けるかもしれません:http://stackoverflow.com/questions/17869659/detecting-if-a-user-is-moving-in-a-car – Rahul

+0

@Rahul背景 –

+0

あなたはfitbitのようなアプリの設定を見ていますか? – Hasya

答えて

1

れたら(ウォーキング、サイクリング、ドライブなど)

の実装について長時間実行バックグラウンドタスク

言及していない以下の通りです

実装に多くの実行時間を必要とするタスクの場合、サスペンドされずにバックグラウンドで実行するための特定のアクセス許可を要求する必要があります。 iOS版では、唯一の特定のアプリの種類は、バックグラウンドで実行が許可されています。バックグラウンドでいる間にユーザに可聴コンテンツを再生

  • アプリ、音楽プレーヤーアプリとして
  • アプリのレコードのオーディオコンテンツの中にあることバックグラウンドで
  • な など、すべての回でその場所を知らさユーザーを保つアプリ、ボイス・オーバー・インターネット・プロトコルをサポートするナビゲーションアプリのアプリに新しいコンテンツをダウンロードして処理する必要が (VoIP)の
  • アプリを定期的
  • アプリその外部アクセサリーからの定期的なアップデートを受け取る
+0

しかし、どうしたらいいですか? 'if(userIsWalking){print("あなたは歩いている ")}'のような情報をどこで得ることができますか? –

+0

あなたがVoIP設定を使用していて、あなたのアプリがそのような機能をサポートしていない場合、Appleはそれを拒否できます。 – Hasya

2

はい、それは可能です!

それは バックグラウンドでいながらも場所を監視しておく必要がありますあなたのiOSアプリは、標準位置情報サービスを利用して バックグラウンドで実行し、位置情報の更新を受け続けるためにUIBackgroundModesキーの場所 値を指定した場合。 (この場合、 は、場所マネージャの ポーズLocateUpdatesAutomaticallyプロパティがYESに設定されていることを確認して、 の電力を節約する必要があります)。このタイプの の位置情報更新が必要なアプリの例は、フィットネスまたはターンバイターンナビゲーションアプリ。

続きを読むhere

+0

しかし、どのようにバックグラウンドで活動の種類(走っている、歩いている、運転しているなど)を取得するのですか? –

+0

私は100%確信していませんが、[CLActivityType](https://developer.apple.com/reference/corelocation/cllocationmanager/1620567-activitytype)をチェックアウトしてください。 –

+0

私は、 –

3

iPhoneの上位5sにコプロセッサm7(+)があります。これにより、デバイスの動きを得ることができます。
ファイル内にちょうどimport CoreMotion
CMMotionActivityManagerオブジェクトを作成します。それはあなたのユーザアクティビティの種類を返します
motionActivityManager.startActivityUpdates(to: OperationQueue.main) { (activity) in if (activity?.automotive)! { print("User using car") } if (activity?.cycling)! { print("User is cycling") } if (activity?.running)! { print("User is running") } if (activity?.walking)! { print("User is walking") } if (activity?.stationary)! { print("User is standing") } if (activity?.unknown)! { print("Unknown activity") } }

motionActivityManager.isActivityAvailable()
この方法を使用するよりも:お使いのデバイスで使用可能なそれ `sの場合
let motionActivityManager = CMMotionActivityManager()
チェックを。

+0

しかし、それはバックグラウンドでうまくいっていますか?バッテリーをあまり排出しないでください。 –

+0

このリクエストには単にdelayを使用するだけで、バッテリーをあまり消費しません。 また、ジオロケーションが変更されたときにリクエストを接続するため、ジオロケーションの変更時にアクティビティタイプをリクエストします。 –

+0

どういう意味ですか?もう少し説明できますか? –

関連する問題