安卓AOSP开发,取消U盘插入时自动创建目录的默认行为

背景介绍

  • 安卓AOSP(Android Open Source Project)开发概述
  • U盘插入时自动创建目录的默认行为
    在安卓AOSP开发中,插入U盘时系统会自动创建一些默认目录,如Music、Pictures等。若需取消这一行为,可以通过修改系统源码来实现。
  • 固定目录的内容在 packages/providers/MediaProvider/src/com/android/providers/media/util/FileUtils.java中。
  public static final String[] DEFAULT_FOLDER_NAMES;
    static {
        if (SdkLevel.isAtLeastS()) {
            DEFAULT_FOLDER_NAMES = new String[]{
                    Environment.DIRECTORY_MUSIC,
                    Environment.DIRECTORY_PODCASTS,
                    Environment.DIRECTORY_RINGTONES,
                    Environment.DIRECTORY_ALARMS,
                    Environment.DIRECTORY_NOTIFICATIONS,
                    Environment.DIRECTORY_PICTURES,
                    Environment.DIRECTORY_MOVIES,
                    Environment.DIRECTORY_DOWNLOADS,
                    Environment.DIRECTORY_DCIM,
                    Environment.DIRECTORY_DOCUMENTS,
                    Environment.DIRECTORY_AUDIOBOOKS,
                    Environment.DIRECTORY_RECORDINGS,
            };
        } else {
            DEFAULT_FOLDER_NAMES = new String[]{
                    Environment.DIRECTORY_MUSIC,
                    Environment.DIRECTORY_PODCASTS,
                    Environment.DIRECTORY_RINGTONES,
                    Environment.DIRECTORY_ALARMS,
                    Environment.DIRECTORY_NOTIFICATIONS,
                    Environment.DIRECTORY_PICTURES,
                    Environment.DIRECTORY_MOVIES,
                    Environment.DIRECTORY_DOWNLOADS,
                    Environment.DIRECTORY_DCIM,
                    Environment.DIRECTORY_DOCUMENTS,
                    Environment.DIRECTORY_AUDIOBOOKS,
                    DIRECTORY_RECORDINGS,
            };
        }
    }
  • 取消自动创建目录的需求场景,某些客户提出不想在插入U盘时创建这些目录。

修改AOSP源码的步骤

  • 定位相关源码文件 packages/providers/MediaProvider
  • 修改U盘挂载时的目录创建逻辑
  • 编译与测试修改后的系统镜像
    在修改完成后使用mm -j8将编译后的MediaProvider推入设备中重启即可生效,插入U盘验证会发现不会再生成那些固定的目录了

具体实现细节

  • 修改MediaProvider服务中的挂载逻辑
  • 调整packages/providers/MediaProvider/src/com/android/providers/media/MediaProvider.java中的目录创建逻辑
  • 具体修改如下
    在ensureDefaultFolders方法中加入 如下代码 getCreatefolders() 方法为可以实现定制的内容,不生成固定目录返回 true 或者false

        try{
            //final File path = getVolumePath(volume.getPath());
            final StorageVolume vol = mStorageManager.getStorageVolume(volume.getPath());
            if (vol != null && !vol.isPrimary()) {
                Log.d(TAG, "ensureDefaultFolders paths ");
                if(getCreatefolders()){
                    Log.d(TAG, "External U disk does not create folders  paths ");
                    return;
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
     private boolean getCreatefolders() {
        return SystemProperties.get("persist.sys.floders", "0").equals("0");
    }    

ensureThumbnailsValid 方法中添加

 if (!dir.exists()) {
                    if (vol != null && vol.isPrimary()) {
                        dir.mkdirs();
                    }else{
                        if(getCreatefolders()){
                            return;
                        }else{
                            dir.mkdirs();
                        }
                    }
                }

测试与验证

  • 插入U盘并检查目录是否自动创建,可先将U盘格式化后插入查看是否任然创建固定目录。

参考资源

  • 安卓AOSP官方文档
  • 相关技术博客与论坛讨论
  • 开源项目与代码示例安卓AOSP开发,取消插入板卡时U盘自动创建Music等目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值