Unityで画像をAndroid本体に保存する


むちゃくちゃ試行錯誤したのでその覚書。

バージョンはUnity : 5.5.0b8 , Android : 5.1.1 と 6.0 。

Androidに画像を保存するには以下の手順が必要になる。

  1. 権限(android.permission.WRITE_EXTERNAL_STORAGE)を追加する
    • Android6以上:requestPermissionsで動的に権限を取得
    • それ以前:Assets/Plugins/Android/AndroidManifest.xmlに権限をつける
  2. 保存先パスの取得
    • 機種ごとに異なる保存先のパスを取得する
  3. 保存する
    • 今回はスクリーンショットを取得する
  4. メディアスキャンしてカメラロールなどで表示されるようにする
    • これをしないと再起動しないと認識できない

権限追加

ここが一番の悩みどころだった。

その1

Android6より前のバージョン用に Assets の下に Plugins/Android フォルダを作り、その下に AndroidManifest.xml というファイルを作る。

これまで作っていなかったら Temp/StagingArea/AndroidManifest.xml をコピーして追記すると楽できる。

今回は以下を追記

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

その2

requestPermissionsを使う。

Assets/Plugins/Android に android-support-v4.jar を置いて、android.support.v4.app.ActivityCompat を使えばいけるかと思ったけど出来なかった。

最終的には以下の記事を参考にしてプラグインを導入。

UnityでRuntimePermissionを利用するプラグイン - スマゲ
UnityでRuntimePermissionを利用するプラグインを作成した■関連 Android6.0からのPermissionの仕様変更についてのまとめ - スマゲ AndroidのRuntime Permissionを実装す...

ここはもう少し簡単に出来る方法を探してみたい。

パス取得

getExternalStorageDirectoryを使ってSDカードのルートディレクトリを取得する。

ファイル保存

スクリーンショットを取る専用関数もあるけどうまくいかなかった。

エラーも吐かず保存もされない。File関数を使うことで回避。

メディアスキャン

MediaScannerConnection.scanFile を使う。

過去にこれに苦しめられた経験があるけど今回は特に問題なかった。

 

これで晴れてUnityでスクショを保存できる。

 


コメントを残す

メールアドレスが公開されることはありません。