首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 獲取 SD 卡路徑返回 /storage/emulated/0/ 的正確理解

     編輯:程式設計綜合問答

現象描述

調用 Environment.getExternalStorageDirectory() 返回 /storage/emulated/0/ 而非傳統 /sdcard/ 或 /mnt/sdcard/,以為是錯誤路徑。

本質解析

  • 統一存儲模型:Android 4.2+ 引入多用戶支持,/storage/emulated/0/ 是真實存儲路徑 /data/media/0/ 的符號鏈接
  • 完全可用:此路徑可正常讀寫,是官方推薦的標準外部存儲路徑
  • 跨設備一致:Nexus、三星、中興等不同廠商設備統一返回此格式

正確獲取方式

// 標準 API(推薦)
File externalDir = Environment.getExternalStorageDirectory();
// 返回:/storage/emulated/0

// 獲取應用專屬外部目錄(無需權限,卸載自動清理)
File appExternalDir = context.getExternalFilesDir(null);
// 返回:/storage/emulated/0/Android/data/com.package.name/files

// 獲取公共下載目錄(API 19+)
File downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

權限配置

<!-- Android 10 (API 29) 以下需聲明 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<!-- Android 10+ 適配分區存儲 -->
<application android:requestLegacyExternalStorage="true" ... >

最佳實踐

  • 優先使用 Context.getExternalFilesDir() 獲取應用私有目錄,無需權限
  • 訪問共享文件使用 MediaStore 或 Storage Access Framework
  • 避免硬編碼路徑,始終通過 API 動態獲取

總結

/storage/emulated/0/ 是正確的標準外部存儲路徑,非錯誤。理解 Android 存儲架構演進,使用官方 API 獲取路徑,才能保證跨版本、跨設備兼容性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved