最終更新:2019-01-23 (水) 07:01:10 (536d)  

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.getFilesDirAndroid/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.

実際のパス

Android/外部ストレージ

  • 共有外部ストレージにパブリック データを保存します
  • 外部ストレージに保存されたファイルは誰でも読み取り可能です
  • すべての Android 互換端末は、ファイルの保存先として共有の「外部ストレージ」をサポートしています。
  • これは、リムーバブル ストレージ メディア(SDカードなど)か、(取り外しできない)内部ストレージです。 外部ストレージに保存されたファイルは誰でも読み取り可能です。
  • また、USB マスストレージからパソコンへのファイル転送を有効にすると、ユーザーがファイルを変更することもできます。

パーミッション

確認

  • 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()

実際のパス

SQLiteデータベース

ネットワーク接続

セキュリティ

参考

関連