2013/02/24
マルチユーザ環境でSDカードのディレクトリをユーザ毎に分ける
その中で、マルチユーザーを意識しなければならない例として、
例えば、「SDカードにデータを保存せざるを得ないが、ユーザは分けたい」場合とか。と書いたのですがSDカード(外部ストレージ)への保存も適切な方法を用いれば特にマルチユーザーユーザを意識する必要はないようです。
具体的には、マルチユーザであっても、シングルユーザと同様、getExternalFilesDir() 等を使ってディレクトリを取得すれば、各ユーザ毎に割り振られたディレクトリを取得出来ます。
参考: 穀風: AndroidアプリのデータはSDカードのどこに保存すべきか?
Nexus 7 上に2人のユーザ(所有者+1)を作成し、以下のコードを実行してみました。
(実行するには、AndroidManifest に
android.permission.WRITE_EXTERNAL_STORAGEの記述が必要です。)
UserManager userManager = (UserManager) getSystemService(USER_SERVICE); UserHandle handle = Process.myUserHandle(); Log.d(TAG, "uid : " + Process.myUid()); Log.d(TAG, "serialNumber : " + userManager.getSerialNumberForUser(handle)); Log.d(TAG, "getFilesDir : " + getFilesDir()); Log.d(TAG, "getExternalFilesDir : " + getExternalFilesDir(null)); Log.d(TAG, "getExternalCacheDir : " + getExternalCacheDir()); Log.d(TAG, "getExternalStorageDirectory : " + Environment.getExternalStorageDirectory()); Log.d(TAG, "getExternalStoragePublicDirectory : " + Environment.getExternalStoragePublicDirectory(""));
結果は以下です。
所有者 uid : 10064 serialNumber : 0 getFilesDir : /data/data/com.kokufu.android.test.multipleusertest/files getExternalFilesDir : /storage/emulated/0/Android/data/com.kokufu.android.test.multipleusertest/files getExternalCacheDir : /storage/emulated/0/Android/data/com.kokufu.android.test.multipleusertest/cache getExternalStorageDirectory : /storage/emulated/0 getExternalStoragePublicDirectory : /storage/emulated/0 ユーザ1 uid : 1010064 serialNumber : 12 getFilesDir : /data/user/10/com.kokufu.android.test.multipleusertest/files getExternalFilesDir : /storage/emulated/10/Android/data/com.kokufu.android.test.multipleusertest/files getExternalCacheDir : /storage/emulated/10/Android/data/com.kokufu.android.test.multipleusertest/cache getExternalStorageDirectory : /storage/emulated/10 getExternalStoragePublicDirectory : /storage/emulated/10
各ユーザ毎に外部ストレージが作成されているのがわかります。
逆に言うと、ユーザ間で外部ストレージを共有することは出来ないということですね。
0 件のコメント:
コメントを投稿