Oculus GoでスカウターのようなViewをオーバーレイした

Oculus Goを買ったばかりのAndroidエンジニアが、
Mobile SDKやUnityに触れることなく、普通のAndroidの知識でいろいろ遊んでいます。
VRなひとたちは当たり前に皆やってることかもしれませんが、楽しかったので書いてます。

基本

さて、Androidは各アプリの上にViewを重ねて表示することができます。
いちばん有名なのはFacebook Messenger のチャットヘッドでしょうか。
その他の使い方としては、端末の通信状況などの情報を表示させるとか。
私が作ったものですが(宣伝)、2つのアプリをワンタップで往復するボタンを常時表示させておくこともできます。
https://play.google.com/store/apps/details?id=com.github.guignol.alternate

実装の基本については、qiita内にも記事がありますし、
https://qiita.com/farman0629/items/ce547821dd2e16e4399e
「facebook chatheads SYSTEM_ALERT_WINDOW」とかでググれば分かると思います。

パーミッション

これをやるにはSYSTEM_ALERT_WINDOWというパーミッションが必要です。
https://qiita.com/chibatching/items/add5e50921c2da5ee1c7

このパーミッション設定を変更させる画面はOculus Goでも出せましたが、
画面内のスイッチを押せないので、諦めてtargetSdkVersionを下げました。
API レベル 23未満なら何でもいいと思いますが、私は適当に21で確認しました。
こうすると、古いAndroidの挙動として、インストール時にパーミッションを得たことになります。

まだ試してませんが、https://www.vysor.io/ を使えば、
AndroidアプリのボタンをPCから押せるので、Runtime Permission等にも対応できるかもしれません。

わーい

screenshot-1526093270436.jpg
Oculus Goのキャプチャ機能だとこのViewは含まれなかったので、vysorを使いました。

起動と終了

起動はAndroid Studioからもできますし、
端末がスリープすると、
このViewを追加したサービスのonDestoryが呼ばれてるっぽいので、
自分で制御する必要は無いかもしれませんが、いちおう参考までにコマンドを載せておきます。

起動.するとき
adb shell monkey -p アプリケーションID -c android.intent.category.LAUNCHER 1
終了.するとき
adb shell am force-stop アプリケーションID

Connecting adb via Wi-Fi

adbを有線で繋ぐのはしんどいのですが、adbはWifi越しに通信できます。
oculusの公式ドキュメントにも「Connecting adb via Wi-Fi」というセクションがあります。
https://developer.oculus.com/documentation/mobilesdk/latest/concepts/mobile-adb/
うまくいかないときは

adb kill-server
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.