安卓12aosp mtp屏蔽内部存储显示,只展示特定文件夹和文件类型

系统:安卓12

屏蔽sd卡/内存存储显示

packages/services/Mtp/src/com/android/mtp/MtpService.java

修改如下,屏蔽了内部存储,如果需要屏蔽sd卡也可以根据这里做修改:

java 复制代码
    private void addStorage(StorageVolume volume) {
        Log.v(TAG, "Adding MTP storage:" + volume.getPath());
        //LIN
        if(volume.getPath().contains("/storage/emulated/")) {
            Log.d(TAG, "不添加 内部路径 "+volume.getPath());
            return;
        }

        synchronized (MtpService.class) {
            if (sServerHolder != null) {
                sServerHolder.database.addStorage(volume);
            }
        }
        if (mPerfBoost == null) {
            mPerfBoost = new BoostFramework(true);
        }
        if (mPerfBoost != null && !mIsPerfLockAcquired) {
            //Use big enough number here to hold the perflock for entire MTP session
            mPerfBoost.perfHint(BoostFramework.VENDOR_HINT_MTP_BOOST, null, Integer.MAX_VALUE, -1);
            mIsPerfLockAcquired = true;
        }
    }

只展示特定文件夹和文件类型

参考链接:Android 11 mtp文件夹自定义显示,且不可写,不可删除_java android 如何让文件夹不被删除-CSDN博客
frameworks/base/media/java/android/mtp/MtpPropertyGroup.java

修改只展示某个app里面的视频、图片内容,并且过滤文件类型

java 复制代码
class MtpPropertyGroup {
    private static final String TAG = MtpPropertyGroup.class.getSimpleName();

    //add by lj start  LIN
    private static String DIRECTORY_RECORD = "Android";
    private static String DIRECTORY_RECORD1 = "data";
    private static String DIRECTORY_RECORD2 = "com.example.xxx";
    private static String DIRECTORY_RECORD3 = "files";
    private static String DIRECTORY_RECORD4 = "video";
    private static String DIRECTORY_RECORD5 = "picture";
    private static String DIRECTORY_RECORD6 = "audio";
    //add by lj end

    private class Property {
        int code;
        int type;
        int column;

        Property(int code, int type, int column) {
            this.code = code;
            this.type = type;
            this.column = column;
        }
    }
java 复制代码
    switch (property.code) {
        case MtpConstants.PROPERTY_PROTECTION_STATUS:
            // protection status is always 0
            list.append(id, property.code, property.type, 0);
            break;
        case MtpConstants.PROPERTY_NAME:
        case MtpConstants.PROPERTY_OBJECT_FILE_NAME:
            //add by lj start LIN
            if (object.getParent().isRoot() && !DIRECTORY_RECORD.equals(object.getName())) {
                responseId = MtpConstants.RESPONSE_INVALID_OBJECT_HANDLE;
                break;
            } else if (!object.getParent().isRoot() &&
            !(
                DIRECTORY_RECORD1.equals(object.getName())
                || DIRECTORY_RECORD2.equals(object.getName())
                || DIRECTORY_RECORD3.equals(object.getName())
                || DIRECTORY_RECORD4.equals(object.getName())
                || DIRECTORY_RECORD5.equals(object.getName())
                || DIRECTORY_RECORD6.equals(object.getName())
                || object.getName().contains("mp4")
                || object.getName().contains("jpg")
                || object.getName().contains("mp3")
                || object.getName().contains("wav")
                || object.getName().contains("aac")
                )){
                responseId = MtpConstants.RESPONSE_INVALID_OBJECT_HANDLE;
                break;
            }
            //add by lj end
        case MtpConstants.PROPERTY_DISPLAY_NAME:
            list.append(id, property.code, object.getName());
            break;
相关推荐
能工智人小辰9 分钟前
Java8 Swing实现计算器
开发语言
SccTsAxR12 分钟前
[C语言]常见排序算法①
c语言·开发语言·经验分享·笔记·其他·排序算法
怀旧,1 小时前
【C++】20. unordered_set和unordered_map
开发语言·c++
alibli1 小时前
一文学会CMakeLists.txt: CMake现代C++跨平台工程化实战
开发语言·c++·系统架构
vocal2 小时前
【Android 构建优化】R8 : 混淆,压缩与优化
android
叽哥2 小时前
Kotlin学习第 7 课:Kotlin 空安全:解决空指针问题的核心机制
android·java·kotlin
诺诺Okami2 小时前
Android Framework-Launcher-默认布局的加载
android
Florence232 小时前
GPU硬件架构和配置的理解
开发语言
狂浪天涯2 小时前
Android Security | SEAndroid 的主体
android
李游Leo2 小时前
JavaScript事件机制与性能优化:防抖 / 节流 / 事件委托 / Passive Event Listeners 全解析
开发语言·javascript·性能优化