UnityでAndroid6.0におけるパーミッションを対応する

Android6.0ではパーミッションをユーザーが任意に変えられる仕組みが導入されました。アプリによっては動かなくなるような致命的な影響を与える変更なので、一度は公式のドキュメントを見た方が良いです。

パーミッションには色々ありますが、一部のパーミッションは危険だという分類にされていて、そのパーミッションを使うにはユーザーが許可する必要があります。それも動的(アプリ実行時)に変わるので、パーミッションが必要な処理をするところではその都度許可されているか調べなくてはなりません。

どのパーミッションが危険かはこの記事のNormal and Dangerous Permissionsを見てください。
私はSNSで画像を添付するためのファイルの読み書き

  • android.permission.READ_EXTERNAL_STORAGE
  • android.permission.WRITE_EXTERNAL_STORAGE

の許可が必要になりました。 (実はWRITEの方があれば良いんですが……)

許可が与えられているかを調べるにはAndroidのContextCompat.checkSelfPermissionを使えば可能です。当然、この呼び出しはJavaになります。プラグインを作ることでも可能ですが、UnityにあるJavaクラスを呼び出すためのクラスAndroidJavaClassを使うとC#のコードだけで実装が可能です。以下にコードを置いておきます。


Check(“android.permission.WRITE_EXTERNAL_STORAGE”)のようにするとパーミッションが許可されているか調べられます。

このコードを利用しても次のエラーが出るでしょう。
AndroidJavaException: java.lang.ClassNotFoundException: android.support.v4.content.ContextCompat
これはライブラリがないため、クラスが見つからないということです。 Plugins/Androidフォルダを作り、そこにandroid-support-v4.jarを置いておけば解決できます。
android-support-v4.jarはAndroid SDKをインストールしたフォルダにあるはずで、
(AndroidのSDKフォルダ)\extras\android\support\v4にjarがあります。これをUnityのプロジェクトの適切な場所にコピーすれば良いです。

コメント

  1. Nexus5X より:

    こんにちは、いつも参考にさせてもらっています。
    今回うまくいかないのですが、jarを配置する場所は
    Asset / Plugins / Android / android-support-v4.jar
    でいいのでしょうか?

  2. 管理人 より:

    そうです。
    以前試した時のプロジェクトではAssets/Plugins/Androidにandroid-support-v4.jarを置けば大丈夫でした。