Android Wearアプリの開発を行っていてハマったのでメモ。
※原因は不明ですがとりあえず回避方法のみ記載
ハマったところ
ハンドヘルド側でボタンを押すと、Wear側のActivityを起動する。
という動作を実装しようと思ったのですが・・・
Wear端末がSleep中にActivtyを起動しても、端末がWakeしないようで、Activity起動後すぐにonPause()が呼ばれてしまいます。
(Activityの起動はwear側のWearableListenerServiceから実施)
強制的にWakeさせようと、ActivityのonCreateでWakelockをしてみたのですが、それでも頑なにSleepを続けます。
(動作としては変わらずActivity起動後即onPauseとなる)
PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, TAG); mWakeLock.acquire(TIMEOUT); getWindow().addFlaggs(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
stackoverflowにも似たような質問が挙がっていた(回答なし)のでしばらくWatchしようと思います。
How to wake up Android Wear when it is in sleep mode?
とりあえずの回避方法
Activityを直接起動するのではなく、Notificationの中にActivityを組込み、バイブレーション有りで通知してあげるとWakeします。
そんでもって、FLAG_KEEP_SCREEN_ONしてあげれば30秒でホーム画面に戻ることもありませんでした。
あとがき
そもそもウェア端末はバッテリーが少ないので、極力Wakeさせないという設計思想なのかな~と考えたり。
そういう意味では、ユーザーのウェア端末に対する明確なアクション(盤面を見る、タッチするとか)がない状態で端末をWakeさせるのは邪道なのかなと。
ではでは~。