最終更新:2019-01-23 (水) 07:01:10 (1892d)
Androidアプリ/ストレージ
Top / Androidアプリ / ストレージ
https://developer.android.com/guide/topics/data/data-storage.html
メモ
- 他のアプリと共有したい情報以外は、データ、キャッシュともにInternal Storageを使う
SharedPreferences
- キーと値のペアでプリミティブ データを保存
Android/内部ストレージ
- 端末のメモリにプライベート データを保存します。
- 内部ストレージに保存されたファイルはそのアプリのプライベート ファイルになり、それ以外のアプリはアクセスできません(ユーザーもアクセスできません)
- プライベート データでも他のアプリに公開する方法があります。それにはAndroid/コンテンツプロバイダを使用します。
- ユーザーがアプリをアンインストールすると、これらのファイルも削除されます。
Android 7.0
- The application private directory (usually /data/data/) is now set to Linux permission 0700 for apps targeting API Level 24+.
プライベートファイル
- /data/data/{パッケージ名}/files
- アプリ内データの永続化領域。アプリのアンイストール時にここのファイル達は失われる。
- 関数
Context.getFilesDir Android/data/data/パッケージ名/files 内部ファイルが保存されたファイルシステム ディレクトリの絶対パスを取得します。 Context.openFileOutput 書き込み Context.openFileInput 読み込み Context.getDir 内部ストレージ領域内にディレクトリを作成します(または既存のディレクトリを開きます)。 Context.deleteFile? 内部ストレージに保存したファイルを削除します。 Context.fileList? 現在アプリによって保存されているファイルの配列を返します。
キャッシュファイル
- Context.getCacheDir
- /data/data/{パッケージ名}/cache
- 設定画面のキャッシュを削除で消せる
- The system will automatically delete files in this directory as disk space is needed elsewhere on the device.
実際のパス
Context.getFilesDir Android/data/data/パッケージ名/files Android/data/user/ユーザ番号/パッケージ名/files? Context.getCacheDir Android/data/data/パッケージ名/cache? Android/data/user/ユーザ番号/パッケージ名/cache? Context.getSharedPreferences Android/data/data/パッケージ名/shared_prefs Android/data/user/ユーザ番号/パッケージ名/shared_prefs? Context.openOrCreateDatabase? Android/data/data/パッケージ名/databases? Android/data/user/ユーザ番号/パッケージ名/databases?
Android/外部ストレージ
- 共有外部ストレージにパブリック データを保存します
- 外部ストレージに保存されたファイルは誰でも読み取り可能です
- すべての Android 互換端末は、ファイルの保存先として共有の「外部ストレージ」をサポートしています。
- これは、リムーバブル ストレージ メディア(SDカードなど)か、(取り外しできない)内部ストレージです。 外部ストレージに保存されたファイルは誰でも読み取り可能です。
- また、USB マスストレージからパソコンへのファイル転送を有効にすると、ユーザーがファイルを変更することもできます。
パーミッション
- android.permission.WRITE_EXTERNAL_STORAGE
- android.permission.READ_EXTERNAL_STORAGE?
確認
- Environment.getExternalStorageState?()
Environment.getExternalStorageDirectory()
- 外部ストレージのディレクトリを取得する。
- ただし、直接ここへ何かを置くべきではない。
Environment.getExternalStoragePublicDirectory(String)
- getExternalStoragePublicDirectory?(Environment.DIRECTORY_DOWNLOADS)):
- /storage/emulated/0/Download
- 外部ストレージ領域の最上位パス。
プライベートファイル
Context.getExternalFilesDir()
Context.getExternalFilesDirs?()
- Android 4.4〜
- /storage/emulated/0/Android/data/{パッケージ名}/files
- アプリ固有の外部ストレージ領域。
- アプリ固有のデータを保存するという点ではContext.getFilesDir()と同様だが、以下の2点が重要な違い
- 常に利用可能というわけではない
- WRITE_EXTERNAL_STORAGE?権限があれば他アプリからの書き込みが可能
Context.getExternalCacheDir()
実際のパス
複数ユーザ時 例 Context.getExternalFilesDir Android/storage/emulated/ユーザ番号/Android/data/パッケージ名/files Android/storage/emulated/0/Android/data/パッケージ名/files? Context.getExternalCacheDir Android/storage/emulated/ユーザ番号/Android/data/パッケージ名/cache? Android/storage/emulated/0/Android/data/パッケージ名/cache? Environment.getExternalStorageDirectory Android/storage/emulated/ユーザ番号 Android/storage/emulated/0 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS?) Android/storage/emulated/ユーザ番号/Download? Android/storage/emulated/0/Download?
SQLiteデータベース
ネットワーク接続
セキュリティ
参考
- http://qiita.com/kakueki61/items/fc97c434f22f9135b491
- https://developer.android.com/guide/topics/data/data-storage.html