使用 Environment.getExternalStorageDirectory() 獲取外部存儲根目錄,拼接子目錄後轉為 URI:
String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();
File wallpaperDir = new File(sdcard, "Wallpaper");
if (!wallpaperDir.exists()) wallpaperDir.mkdirs();
// 方式 1: file:// URI
Uri uri1 = Uri.fromFile(wallpaperDir);
// 方式 2: 解析字符串
Uri uri2 = Uri.parse("file://" + wallpaperDir.getAbsolutePath());
Uri.fromFile() 在 Android 7.0+ 觸發 FileUriExposedException。FileProvider 生成 content:// URI,或直接傳遞 File 對象給需文件路徑的 API。MediaStore 插入獲取 content:// URI。原代碼複製 assets 文件到 /sdcard/Wallpaper/ 後未獲取該目錄 URI,直接拼接字符串易出錯。上述方法統一由系統 API 解析路徑,更可靠。