key blog

VR,AR系の開発を行っているエンジニアです。ほとんど自分の備忘録です。

Android 内蔵ストレージのルートディレクトリのパスを取得

Androidアプリで端末内のファイルにアクセスする為にのお話。

Unityで定義されているApplication.dataPathやStreamingAssetsフォルダを使用してもよいが、

”ユーザーに自分で用意したファイルをスマホに入れてもらう”という事を要求する場合わかりやすい階層のほうが良いかと思い方法を調べました。

あと固定値でも良いかと思ったのですが、端末かAndroidのバージョン依存なのかで変わっちゃうみたいなので。
("/storage/emulated/0/"とか"/sdcard0/"とか)

方法は下記の通り。

#if !UNITY_EDITOR && UNITY_ANDROID
        using (AndroidJavaClass env = new AndroidJavaClass("android.os.Environment"))
        {
            using (AndroidJavaObject storageDir = environment.CallStatic<AndroidJavaObject>("getExternalStorageDirectory"))
            {
                _StorageDir = storageDir.Call<string>("getCanonicalPath");
            }
        }
#endif


要はJavaのクラス・関数でそのようなものが用意されているので、それを使うだけです。