安卓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;
相关推荐
Biomamba生信基地2 分钟前
R语言基础| 功效分析
开发语言·python·r语言·医药
手可摘星河4 分钟前
php中 cli和cgi的区别
开发语言·php
CT随27 分钟前
Redis内存碎片详解
java·开发语言
anlog36 分钟前
C#在自定义事件里传递数据
开发语言·c#·自定义事件
奶香臭豆腐1 小时前
C++ —— 模板类具体化
开发语言·c++·学习
晚夜微雨问海棠呀1 小时前
长沙景区数据分析项目实现
开发语言·python·信息可视化
graceyun1 小时前
C语言初阶习题【9】数9的个数
c语言·开发语言
波音彬要多做2 小时前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法
Swift社区2 小时前
Excel 列名称转换问题 Swift 解答
开发语言·excel·swift
一道微光2 小时前
Mac的M2芯片运行lightgbm报错,其他python包可用,x86_x64架构运行
开发语言·python·macos