期望照片儲存在 /data/data/com.androidproject/files/Camera/photo.png(內部儲存),但實際 Log 顯示 file:///storage/emulated/0/Android/data/com.androidproject/files/Camera/photo.png(外部儲存)。
程式碼使用 getExternalFilesDir("Camera"),這會回傳 **外部儲存** 的應用專屬目錄(通常位於 SD 卡或模擬的共享儲存),而非內部儲存。
File dir = new File(getFilesDir(), "Camera");
if (!dir.exists()) dir.mkdirs();
File photo = new File(dir, "photo.png");
// 使用 photo.getAbsolutePath() 或 Uri.fromFile(photo)
File dir = getExternalFilesDir("Camera"); // 無需權限,API 19+
if (dir != null) {
File photo = new File(dir, "photo.png");
// ...
}
| 方法 | 儲存位置 | 權限需求 | 應用卸載後 | 用戶可見性 |
|---|---|---|---|---|
getFilesDir() | 內部儲存 /data/data/pkg/files | 無 | 刪除 | 不可見(需 Root) |
getExternalFilesDir() | 外部儲存 /sdcard/Android/data/pkg/files | API 19+ 無需權限 | 刪除 | 可見(檔案管理器) |
Environment.getExternalStoragePublicDirectory() | 公共目錄(如 DCIM、Pictures) | 需 READ/WRITE_EXTERNAL_STORAGE | 保留 | 完全可見 |
getFilesDir()。getExternalFilesDir() 或 MediaStore。MediaStore 或 ContentResolver。