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等にも対応できるかもしれません。
→できました。
わーい
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
パーミッションに関する追記
https://www.vysor.io/ で設定アプリをタップすることができるので、Runtime Permissionその他も何とでもなりました。
adb shell monkey -p com.android.settings -c android.intent.category.LAUNCHER 1
adb shell am force-stop
(なみに、上記画像は、スカウターを卒業して、画面の左下の視界ギリギリに出るようにしたのものです。)
adb install
の-g
オプション
しかし、この記事のコメント で
adb install に -g オプションを付けるとすべてのパーミッションが付与されるので
と教えてもらったので、試したらできました。無敵ですね。
ヘルプを見ると
-g: grant all runtime permissions
だそうです。なるほど。
adb install
のオプションは-r
しか使ったことなかったです。
-r: replace existing application