0

私はAndroid Wear用のアプリケーションを構築しました。これは、データ収集の目的で動き(加速度センサー)センサーを1時間程度連続して測定する必要があります。動作中に、デバイスが周囲モード(またはスリープ)に入り、センサを減速(または遮断)する問題が発生しました。 その結果、次のコマンドを使用して画面をロックしていますが、動作するようです。しかし、実際に画面が必要なのではなく、センサーが動いているだけなので、無駄に思えます。Android Wear:センサーの測定と周囲のモード/スリープの防止

getWindow()。clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); //スリープできるようにする

私は主なアクティビティにonSensorsChanged()メソッドを持っています。私はそれをサービスに入れたいと思っていますが、それがメインのUIスレッドにまだ残っているなら、それが助けにならないことを理解しています。私はそれを自分のスレッドに入れることができましたが、アンビエントモードがセンサーの速度を落とさないことは確かではありません。 質問: 1)周囲モードを防止する方法はありますか?または、それをオフに検出された場合? 2)センサが独自のサービス/スレッドにある場合、そのアクティビティをスリープ状態にしても、フルレートでセンサ収集を維持できますか? 3)センサーが独自のサービス/スレッドにある場合でも、DataPiを介してデータを電話に送信できますか?おかげさまで

答えて

3

1)ウェイクロックを使用してください。目を覚ましCPUを保つが、画面が暗く手放すには、次のようなコードを使用することができます。

PowerManager powerMgr = (PowerManager) getSystemService(Context.POWER_SERVICE); 
wakeLock = powerMgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); 
wakeLock.acquire(duration); 

TAGは、ウェイクロックを保持しているコンポーネントを示す文字列で、durationはミリ秒単位で測定されます。

私は、デバイスが周囲に持ち込まれないようにすることによるバッテリーの悪影響について警告する必要はないと仮定します。平均的なWearデバイスは、あなたが提案した固い時間に耐えられるかもしれません。

2)はい。これは、Serviceの定義の一種で、「ユーザーとやり取りしないで長期間実行するアプリケーションの希望」(https://developer.android.com/reference/android/app/Service.html)を表すアプリケーションコンポーネントです。

3)はい。私はこれをいくつかのアプリで行います。 Data APIコールがUIスレッド上にある必要があるという要件はありません。

+0

PowerManager.PARTIAL_WAKE_LOCKは時計を周囲モードにするのを止めるのではなく、CPUがスリープ状態にならないようにします。だから、彼はちょうど間違って言葉を言いたいのです。 –

+0

@CraigJありがとう、私は説明を明確にした。 – String

関連する問題