You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 12外部公共目录创建隐藏文件夹问题求助

在Android 12外部公共目录创建隐藏文件夹的正确方法

你遇到的问题是因为Android 12对外部公共目录的文件/文件夹命名新增了限制:直接以.开头的名称会被系统自动修改(比如变为_.folderName),同时失去隐藏属性。以下是两种可行的解决方案:

方案一:使用MediaStore API(推荐)

Android 10及以上官方推荐使用MediaStore API访问公共媒体目录,这种方式可以绕过系统的命名限制,正确创建隐藏文件夹:

步骤1:声明权限

在AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

注意要在运行时动态申请WRITE_EXTERNAL_STORAGE权限。

步骤2:创建隐藏文件夹

使用以下代码创建DCIM目录下的.folderName隐藏文件夹:

val contentValues = ContentValues().apply {
    // 设置文件夹名称为带点的隐藏名
    put(MediaStore.MediaColumns.DISPLAY_NAME, ".folderName")
    // 指定类型为目录
    put(MediaStore.MediaColumns.MIME_TYPE, "vnd.android.document/directory")
    // 设置相对路径为DCIM目录
    put(MediaStore.MediaColumns.RELATIVE_PATH, "${Environment.DIRECTORY_DCIM}/")
    // 标记为私有/隐藏
    put(MediaStore.MediaColumns.IS_PRIVATE, 1)
    // 临时标记为待处理,避免创建过程中被媒体扫描器识别
    put(MediaStore.MediaColumns.IS_PENDING, 1)
}

// 插入目录到MediaStore
val uri = contentResolver.insert(MediaStore.Files.getContentUri("external"), contentValues)
uri?.let {
    // 完成创建,取消待处理标记
    contentResolver.update(
        it,
        ContentValues().apply { put(MediaStore.MediaColumns.IS_PENDING, 0) },
        null,
        null
    )
}

方案二:先创建普通文件夹再重命名(兼容旧版本)

如果需要兼容更低版本,可以先创建一个普通名称的文件夹,再通过renameTo修改为带点的隐藏名称:

val dcimDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
val tempFolder = File(dcimDir, "tempFolder")
val hiddenFolder = File(dcimDir, ".folderName")

// 先创建临时文件夹
if (tempFolder.mkdirs()) {
    // 重命名为隐藏文件夹
    tempFolder.renameTo(hiddenFolder)
}

注意:这种方式在Android 12上可能受限于系统的命名规则,部分设备可能仍然会被自动修改名称,因此优先推荐方案一。


内容的提问来源于stack exchange,提问作者Shobana Velmurugan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:17:29