ハンドヘルド側からActivityを起動してもウェア端末がWakeしない場合の回避方法


Pocket

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させるのは邪道なのかなと。

ではでは~。

 
 

Leave a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です