はじめに
現在、「端末のマイクで声を録音する」という要件を含んだパビリオンを開発しています。 んで、対応するためには Runtime Permission へのサポートを行う必要があるわけです。 その辺対応している時に色々調べたので、その知見を雑に纏めます。
ハマりポイント
- iOS と足並みを揃える
- Unity のお節介
AndroidManifest.xml
マージ
iOS と足並みを揃える
iOS と Android とで Runtime Permission の実装方法は異なります。*1
大きな違いとして Android では Application.RequestUserAuthorization
が使えない(っぽい) という点が挙げられます。
このため、Android 用に専用処理を書いてあげる必要があります。
細かい説明は他のブログ記事に譲りますが、 UnityEngine.AndroidJavaClass
とかを使って android.support.v4.content.ContextCompat.checkSelfPermission()
とか android.support.v4.app.ActivityCompat.requestPermissions
とかを呼んであげる感じですね。
詳細なコードは、以下のリポジトリが参考になるんじゃないですかね?(宣伝)
Android での Runtime Permission
Unity のお節介
最新の Unity *2 は、プロジェクト内で UnityEngine.Microphone
クラスを使用しており、かつ Target SDK Version が API Level 23 (Android 6.0 / Marshmallow) 以上の場合に、「起動時に Runtime Permission ダイアログを出す」という心折親切設計になっております。
このため、「いや、ちゃうねん。自分で制御するから、そういうのええねん!」という人にとっては、問題になります。
で、これを回避するための手段もちゃんと用意されています。
ザックリ要約すれば「<meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="true" />
を AndroidManifest.xml
に追記」すれば OK です。簡単ですね!
AndroidManifest.xml のマージ
で、じゃあ AndroidManifest.xml
に書こうかな、と思った時に、ぶつかるのが「 AndroidManifest.xml
のマージ」に関する問題です。
言い換えると、Unity で Android 向けに APK をビルドすると、ヨシナに AndroidManifest.xml
のマージ処理を走らせてくれるのですが、この辺のマージルールについてしっかり理解して上記の unityplayer.SkipPermissionsDialog
を追記してあげないといけない、ってコトですね。
Android Developer のドキュメント にしっかり纏められているので、詳細はこちらを参照してください。
やり方としては、「小さい Library Project として AndroidManifest.xml
マージ用の設定を配置する」と楽なんじゃないかと。
詳細な設定としては、以下のリポジトリが参考になるんじゃないですかね?(宣伝)(しつこい)
AndroidManifest.xml
project.properties
まとめ
実機のアレコレは、色々とハマリどころが多いので大変ですね。