测试平台

Platform: RK3568
OS: Android 11.0

需求描述

目前系统内部设备没有对硬盘(sata/usb移动硬盘)和u盘做区分,统一显示的为usb存储设备.目前有需求要在显示上有所区分。

解决方案

如何区分移动硬盘和U盘,见Android usb设备的检测及区分(sata硬盘、优盘及移动硬盘).主要就是检测removeable值,为0:硬盘,为1:u盘

解决补丁如下

From 572cf35c07f68c5cb5defe40c536dd9ad1b4648e Mon Sep 17 00:00:00 2001
From: sjf <sjf@t-chip.com.cn>
Date: Sat, 20 Mar 2021 11:31:51 +0800
Subject: [PATCH] =?UTF-8?q?Android->Vold-DiskInfo:=E6=B7=BB=E5=8A=A0?==?UTF-8?q?=E7=A1=AC=E7=9B=98=E7=B1=BB=E5=9E=8B,=E5=B0=86usb=E5=AD=98?==?UTF-8?q?=E5=82=A8=E8=AE=BE=E5=A4=87=E5=8C=BA=E5=88=86u=E7=9B=98?==?UTF-8?q?=E5=92=8C=E7=A1=AC=E7=9B=98(U=E7=9B=98=E6=98=BE=E7=A4=BAusb=20d?==?UTF-8?q?river,usb/sata=E7=A1=AC=E7=9B=98=E6=98=BE=E7=A4=BAHardDisk)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit---.../base/core/java/android/os/storage/DiskInfo.java | 10 ++++++++++.../base/core/res/res/values-zh-rCN/strings.xml     |  3 ++-.../base/core/res/res/values-zh-rHK/strings.xml     |  3 ++-.../base/core/res/res/values-zh-rTW/strings.xml     |  3 ++-frameworks/base/core/res/res/values/strings.xml     |  4 +++-frameworks/base/core/res/res/values/symbols.xml     |  1 +system/vold/VolumeManager.cpp                       | 21 ++++++++++++++++++++-system/vold/model/Disk.h                            |  1 +8 files changed, 41 insertions(+), 5 deletions(-)diff --git a/frameworks/base/core/java/android/os/storage/DiskInfo.java b/frameworks/base/core/java/android/os/storage/DiskInfo.java
index b05474e..fb80849 100644
--- a/frameworks/base/core/java/android/os/storage/DiskInfo.java
+++ b/frameworks/base/core/java/android/os/storage/DiskInfo.java
@@ -51,6 +51,7 @@ public class DiskInfo implements Parcelable {public static final int FLAG_SD = 1 << 2;public static final int FLAG_USB = 1 << 3;public static final int FLAG_PCIE = 1 << 6;
+    public static final int FLAG_HARDDISK = 1 << 7;public final String id;@UnsupportedAppUsage
@@ -119,6 +120,8 @@ public class DiskInfo implements Parcelable {}}else if ((flags & FLAG_PCIE) != 0) {return res.getString(com.android.internal.R.string.storage_pcie_drive);
+        } else if ((flags & FLAG_HARDDISK) != 0) {+            return res.getString(com.android.internal.R.string.storage_harddisk_drive);} else {return null;}
@@ -132,6 +135,8 @@ public class DiskInfo implements Parcelable {return res.getString(com.android.internal.R.string.storage_usb_drive);} else if (isPcie()) {return res.getString(com.android.internal.R.string.storage_pcie_drive);
+        } else if (isHardDisk()) {+            return res.getString(com.android.internal.R.string.storage_harddisk_drive);} else {return null;}
@@ -162,6 +167,11 @@ public class DiskInfo implements Parcelable {return (flags & FLAG_PCIE) != 0;}+    @UnsupportedAppUsage
+    public boolean isHardDisk() {+        return (flags & FLAG_HARDDISK) != 0;
+    }
+@Overridepublic String toString() {final CharArrayWriter writer = new CharArrayWriter();
diff --git a/frameworks/base/core/res/res/values-zh-rCN/strings.xml b/frameworks/base/core/res/res/values-zh-rCN/strings.xml
index d686fc4..aeeda2b 100644
--- a/frameworks/base/core/res/res/values-zh-rCN/strings.xml
+++ b/frameworks/base/core/res/res/values-zh-rCN/strings.xml
@@ -1513,7 +1513,8 @@<string name="storage_usb_drive" msgid="448030813201444573">"U 盘"</string><string name="storage_usb_drive_label" msgid="6631740655876540521">"<xliff:g id="MANUFACTURER">%s</xliff:g> U 盘"</string><string name="storage_usb" msgid="2391213347883616886">"USB存储器"</string>
-    <string name="storage_pcie_drive">固态硬盘</string>
+    <string name="storage_pcie_drive">PCIE 固态硬盘</string>
+    <string name="storage_harddisk_drive">硬盘</string><string name="extract_edit_menu_button" msgid="63954536535863040">"修改"</string><string name="data_usage_warning_title" msgid="9034893717078325845">"数据流量警告"</string><string name="data_usage_warning_body" msgid="1669325367188029454">"您已使用 <xliff:g id="APP">%s</xliff:g> 的数据流量"</string>
diff --git a/frameworks/base/core/res/res/values-zh-rHK/strings.xml b/frameworks/base/core/res/res/values-zh-rHK/strings.xml
index 06afaeb..f8369ce 100644
--- a/frameworks/base/core/res/res/values-zh-rHK/strings.xml
+++ b/frameworks/base/core/res/res/values-zh-rHK/strings.xml
@@ -1513,7 +1513,8 @@<string name="storage_usb_drive" msgid="448030813201444573">"USB 驅動器"</string><string name="storage_usb_drive_label" msgid="6631740655876540521">"<xliff:g id="MANUFACTURER">%s</xliff:g> USB 驅動器"</string><string name="storage_usb" msgid="2391213347883616886">"USB 儲存裝置"</string>
-    <string name="storage_pcie_drive">固態硬碟</string>
+    <string name="storage_pcie_drive">PCIE固態硬碟</string>
+    <string name="storage_harddisk_drive">硬碟</string><string name="extract_edit_menu_button" msgid="63954536535863040">"編輯"</string><string name="data_usage_warning_title" msgid="9034893717078325845">"數據用量警告"</string><string name="data_usage_warning_body" msgid="1669325367188029454">"您已使用 <xliff:g id="APP">%s</xliff:g> 流動數據"</string>
diff --git a/frameworks/base/core/res/res/values-zh-rTW/strings.xml b/frameworks/base/core/res/res/values-zh-rTW/strings.xml
index 96ffb33..e4fb2bf 100644
--- a/frameworks/base/core/res/res/values-zh-rTW/strings.xml
+++ b/frameworks/base/core/res/res/values-zh-rTW/strings.xml
@@ -1513,7 +1513,8 @@<string name="storage_usb_drive" msgid="448030813201444573">"USB 隨身碟"</string><string name="storage_usb_drive_label" msgid="6631740655876540521">"<xliff:g id="MANUFACTURER">%s</xliff:g> USB 隨身碟"</string><string name="storage_usb" msgid="2391213347883616886">"USB 儲存裝置"</string>
-    <string name="storage_pcie_drive">固態硬碟</string>
+    <string name="storage_pcie_drive">PCIE 固態硬碟</string>
+    <string name="storage_harddisk_drive">硬碟</string><string name="extract_edit_menu_button" msgid="63954536535863040">"編輯"</string><string name="data_usage_warning_title" msgid="9034893717078325845">"數據用量警告"</string><string name="data_usage_warning_body" msgid="1669325367188029454">"你的數據用量已達 <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/frameworks/base/core/res/res/values/strings.xml b/frameworks/base/core/res/res/values/strings.xml
index c67a905..cc60ae3 100644
--- a/frameworks/base/core/res/res/values/strings.xml
+++ b/frameworks/base/core/res/res/values/strings.xml
@@ -4052,7 +4052,9 @@<!-- Storage description for USB storage. [CHAR LIMIT=NONE] --><string name="storage_usb">USB storage</string>-    <string name="storage_pcie_drive">PCIE driver</string>
+    <string name="storage_pcie_drive">PCIE storage</string>
+
+    <string name="storage_harddisk_drive">HardDisk storage</string><!-- Button text for the edit menu in input method extract mode. [CHAR LIMIT=16] --><string name="extract_edit_menu_button">Edit</string>
diff --git a/frameworks/base/core/res/res/values/symbols.xml b/frameworks/base/core/res/res/values/symbols.xml
index 24d5228..7c85c80 100644
--- a/frameworks/base/core/res/res/values/symbols.xml
+++ b/frameworks/base/core/res/res/values/symbols.xml
@@ -2663,6 +2663,7 @@<java-symbol type="string" name="storage_usb_drive_label" /><java-symbol type="string" name="storage_usb" /><java-symbol type="string" name="storage_pcie_drive" />
+  <java-symbol type="string" name="storage_harddisk_drive" /><java-symbol type="drawable" name="ic_eject_24dp" /><java-symbol type="drawable" name="ic_folder_24dp" />
diff --git a/system/vold/VolumeManager.cpp b/system/vold/VolumeManager.cpp
index d1809b4..fdf728d 100644
--- a/system/vold/VolumeManager.cpp
+++ b/system/vold/VolumeManager.cpp
@@ -36,6 +36,7 @@#include <linux/kdev_t.h>#include <ApexProperties.sysprop.h>
+#include <android-base/file.h>#include <android-base/logging.h>#include <android-base/parseint.h>#include <android-base/properties.h>
@@ -72,6 +73,7 @@#include "model/StubVolume.h"using android::OK;
+using android::base::ReadFileToString;using android::base::GetBoolProperty;using android::base::StartsWith;using android::base::StringAppendF;
@@ -236,12 +238,29 @@ void VolumeManager::handleBlockEvent(NetlinkEvent* evt) {// devices are SD, and that everything else is USBint flags = source->getFlags();LOG(VERBOSE) << "handleBlockEvent with action  kAdd flags" << flags;
+if (major == kMajorBlockMmc || IsVirtioBlkDevice(major)) {flags |= android::vold::Disk::Flags::kSd;}else if (major == kMajorBlockPcie) {flags |= android::vold::Disk::Flags::kPcie;} else {-                        flags |= android::vold::Disk::Flags::kUsb;
+                        std::string removable_path(StringPrintf("/sys/%s", eventPath.c_str()) + "/removable");
+                        //PLOG(WARNING) << "removable_path:" << removable_path;
+                        std::string removable = "1";//default is usb
+                        if (ReadFileToString(removable_path, &removable)) {+                            removable = android::base::Trim(removable);
+                            //PLOG(WARNING) << "removable:" << removable;
+                            if(strcmp(removable.c_str(), "0") == 0){+                                PLOG(WARNING) << "set Flags kHardDisk";
+                                flags |= android::vold::Disk::Flags::kHardDisk;
+                            }else{+                                PLOG(WARNING) << "set Flags kUsb";
+                                flags |= android::vold::Disk::Flags::kUsb;
+                            }
+                        }else{+                            PLOG(WARNING) << "Failed to read removable,set Flags KUsb";
+                            flags |= android::vold::Disk::Flags::kUsb;
+                        }}auto disk =
diff --git a/system/vold/model/Disk.h b/system/vold/model/Disk.h
index dda4a5d..3e3e29d 100644
--- a/system/vold/model/Disk.h
+++ b/system/vold/model/Disk.h
@@ -57,6 +57,7 @@ class Disk {* Android (e.g., ARC++). */kStub = 1 << 5,kPcie = 1 << 6,
+        kHardDisk = 1 << 7,};const std::string& getId() const { return mId; }
--
2.7.4

实现效果如图所示:


[RK3568][Android11.0]Vold-DiskInfo:区分u盘和硬盘相关推荐

  1. RK3568 Android11.0多屏配置

    RK3568 Android11.0 LCD多屏配置 文章目录 RK3568 Android11.0 LCD多屏配置 LCD参数配置 LVDS显示配置 DSI0显示配置 DSI1显示配置 EDP显示配 ...

  2. android12.0(S) 如何区分U盘和TF卡

    一开始没找到合适的方法,后来看到系统通知栏中直接显示了对应类型, 找到对应代码但在普通app中用不了,那只能上反射大法了 public class SDCardUtil{private static ...

  3. RK3568 Android11.0.1 电池充放电管理

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.power_supply子系统介绍 二.power_supply更新状态 总结 前言 现在有部分机器用途于便携式设 ...

  4. 计算机无法识别3.0u盘启动,USB3.0接口不能识别U盘的解决方法

    USB3.0接口不能识别U盘的解决方法 USB接口可以说是电脑的标配,现在基本上所有电脑都会搭载USB接口.而USB标准从1.0发展到现在的3.0,甚至更新的也已出来.不过,如果USB3.0无法识别U ...

  5. 汽车号牌里的I和O与1和0要怎么区分,会不会容易看错?【转载】

    汽车号牌里的I和O与1和0要怎么区分,会不会容易看错? #交通那些事# 一种很好奇,汽车牌照里的数字如果同时出现"1+0"和"I+O"会怎样,怎么区分呢? 1, ...

  6. 计算机无法识别3.0u盘启动,USB3.0接口不能识别U盘怎么办

    USB接口可以说是电脑的标配,其中不同接口读取和存储速度不同,现在一般采用3.0接口.不过,如果USB3.0无法识别U盘,那该怎么办呢? 解决USB3.0接口不能识别U盘的小技巧 USB3.0是一种技 ...

  7. [RK3568 Android11] 开发之开发者选项中添加USB OTG模式切换(一)

    目录 前言 一.创建全局变量 前言 上一篇已讲底层是怎么设置USB OTG模式<[RK3568 Android11] 教程之USB OTG模式切换>,此篇开始讲解怎么在设置应用->开 ...

  8. 机械设计手册2[1].0的关于要插盘的问题的解密文件

    [转贴 2006-04-17 19:27:48 机械设计手册2[1].0的关于要插盘的问题的解密文件 机械设计手册(软件版)R2.0要插盘问题的解决办法!10秒钟搞定!1.开始菜单/运行. 2.在打开 ...

  9. [RK3568 Android11] 开发之内置默认中文输入法(谷歌输入法)

    总目录链接:[RK3568 Android11] 本专栏说明和总目录 目录 前言 一.下载拼音输入法软件 二.内置谷歌输入法APP

最新文章

  1. python字典去重
  2. git 远程分支创建与推送
  3. css float(脱离正常流:向左/右浮动直到父元素/另一float, 不占空间)
  4. Jerry Wang 2013年几篇比较受欢迎的SAP社区博客
  5. android传感器获取运动方向,Android开发者指南-运动传感器Motion Sensor[原创译文]...
  6. mongodb中Gson和java##Bean对象转化类
  7. 大厂十年研发经历,总结了12条安卓开发条经验
  8. ng机器学习视频笔记(十三) ——异常检测与高斯密度估计
  9. java 找序列最小值_【C++编程练习】任意给定 n 个有序整数,求这 n 个有序整数序列的最大值,中位数和最小值...
  10. golang中tcp socket粘包问题和处理
  11. 免费网站推广,网站推广的方法
  12. 东财《组织行为学B》综合作业
  13. Android View绘制6 Draw过程(下)
  14. ASP.NET 安全认证(二)——灵活运用 Form 表单认证中的 deny 与 allow 及保护 .htm 等文件(转)...
  15. pandas入门与数据准备与简单筛选统计
  16. 工程伦理学_笔记(复习用)
  17. supervisor 初探
  18. 我的世界自制mod{1}
  19. 批量删除某网站上传的题库
  20. 期货价格和点价(期货 点价)

热门文章

  1. STM32F100R4 单片机解密特性 ST芯片解密
  2. IDEA自动生成实体类XML
  3. 随时随地可轻松赚钱的APP-自动赚钱宝
  4. 增量式编码器c语言,关于增量式编码器编程指导及使用方法的介绍
  5. 3D产品建模为3D产品展示打下基础
  6. openFOAM当中的收敛问题
  7. 设备功耗计算专题《低功耗实战篇,ESP8266睡眠模式1@深度睡眠Deep-sleep》
  8. Excel表格模板打包下载┆收集了各类各行业Excel表格、word模板
  9. 敏捷成熟度评估模型-AMM评估管理实践与技术实践
  10. python小技巧之:同时安装py2和py3,如何在指定的版本下pip安装包