【Android】内部ストレージ化(Adoptable Storage)の設定が正しく行われていても、プログラムから context.getFilesDir() で取得したパスに保存するだけでは、自動的にSDカード側が優先的に使われるわけではない。

Android

内部ストレージ化(Adoptable Storage)の設定が正しく行われていても、プログラムから context.getFilesDir() で取得したパスに保存するだけでは、自動的にSDカード側が優先的に使われるわけではないという点に注意が必要です。

なぜ反映されないのか(Androidの仕様)

Androidの内部ストレージ化機能は、物理的な2つのストレージ(内蔵メモリとSDカード)を仮想的に1つにまとめますが、ディレクトリ構造まで完全に混ざり合うわけではありません。

  • context.getFilesDir() の挙動: 通常、このメソッドは常に本体内蔵メモリ側/data/user/0/パッケージ名/files)のパスを返します。
  • データの配置: システムは「アプリごと」に、そのデータを「内蔵メモリに置くか」「SDカードに置くか」を決定します。コードから強制的にSDカード領域の getFilesDir() を指定することは通常できません。

SDカードの容量を「使う」ための設定

アプリのデータをSDカード側の容量に反映させるには、ユーザーがシステム設定から**「アプリをSDカードに移動」**させる必要があります。

  1. タブレットの「設定」>「アプリと通知」>「すべてのアプリを表示」
  2. 該当のアプリを選択
  3. **「ストレージ」**をタップ
  4. 「使用されているストレージ」という項目に**「変更」**ボタンがあるか確認します。
  5. ここで「SDカード」を選択して移動させると、そのアプリの getFilesDir() が指す実体(保存先)が物理的なSDカード領域に切り替わり、SDカードの容量を消費するようになります。

thoughtful 設定画面に「変更」ボタンがない、あるいは変更しても状況が変わらない場合、Androidの**「マニフェスト設定」または「内部ストレージ化の仕様」**が壁になっている可能性が高いです。

以下の3つのポイントを確認してみてください。


アプリ側で「外部への移動」を許可しているか

Androidアプリは、開発者が明示的に許可しない限り、内部ストレージ化したSDカードへの移動(書き込み先変更)が制限されることがあります。

AndroidManifest.xml<manifest> タグに以下の属性が含まれているか確認してください。

XML

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="auto"> ...
</manifest>
  • auto または preferExternal: これが指定されていない(デフォルト)場合、システムはアプリを頑なに内蔵メモリに留めようとし、getFilesDir() の実体も内蔵メモリから動きません。

getFilesDir()getExternalFilesDirs() の違い

内部ストレージ化していても、Androidのファイルシステム上は**「厳格な内部領域」「拡張された外部領域」**の区別が残っています。

  • getFilesDir(): 基本的に /data/user/0/...(内蔵チップ)を指し続けます。
  • getExternalFilesDirs(null): 内部ストレージ化されたSDカードを含めた、より広い保存先を返します。

実験: 以下のコードを実行して、ログに複数のパスが出てこないか確認してみてください。

Java

File[] dirs = context.getExternalFilesDirs(null);
for (int i = 0; i < dirs.length; i++) {
    Log.d("STORAGE_CHECK", "Index " + i + ": " + dirs[i].getAbsolutePath());
}

内部ストレージ化が成功していれば、この配列のいずれかのパス(多くの場合 index 1 以降)がSDカード上の領域を指しており、そこへ保存すればSDカードの容量が消費されます。

【強制手段】開発者オプションで移動を許可する

もしアプリの設定画面に「変更」ボタンが出ない場合、OSレベルで強制的に移動を許可する設定があります。

  1. タブレットの「設定」>「デバイス情報」>**「ビルド番号」を連打**して開発者モードを有効にする。
  2. 「設定」>「システム」>「開発者向けオプション」を開く。
  3. 「外部ストレージへのアプリの書き込みを強制的に許可する」(Force allow apps on external)をオンにする。
  4. この後、再度アプリのストレージ設定を確認すると「変更」ボタンが出現することがあります。

コメント