[RK3568][Android11.0]Vold-DiskInfo:区分u盘和硬盘
测试平台
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盘和硬盘相关推荐
- RK3568 Android11.0多屏配置
RK3568 Android11.0 LCD多屏配置 文章目录 RK3568 Android11.0 LCD多屏配置 LCD参数配置 LVDS显示配置 DSI0显示配置 DSI1显示配置 EDP显示配 ...
- android12.0(S) 如何区分U盘和TF卡
一开始没找到合适的方法,后来看到系统通知栏中直接显示了对应类型, 找到对应代码但在普通app中用不了,那只能上反射大法了 public class SDCardUtil{private static ...
- RK3568 Android11.0.1 电池充放电管理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.power_supply子系统介绍 二.power_supply更新状态 总结 前言 现在有部分机器用途于便携式设 ...
- 计算机无法识别3.0u盘启动,USB3.0接口不能识别U盘的解决方法
USB3.0接口不能识别U盘的解决方法 USB接口可以说是电脑的标配,现在基本上所有电脑都会搭载USB接口.而USB标准从1.0发展到现在的3.0,甚至更新的也已出来.不过,如果USB3.0无法识别U ...
- 汽车号牌里的I和O与1和0要怎么区分,会不会容易看错?【转载】
汽车号牌里的I和O与1和0要怎么区分,会不会容易看错? #交通那些事# 一种很好奇,汽车牌照里的数字如果同时出现"1+0"和"I+O"会怎样,怎么区分呢? 1, ...
- 计算机无法识别3.0u盘启动,USB3.0接口不能识别U盘怎么办
USB接口可以说是电脑的标配,其中不同接口读取和存储速度不同,现在一般采用3.0接口.不过,如果USB3.0无法识别U盘,那该怎么办呢? 解决USB3.0接口不能识别U盘的小技巧 USB3.0是一种技 ...
- [RK3568 Android11] 开发之开发者选项中添加USB OTG模式切换(一)
目录 前言 一.创建全局变量 前言 上一篇已讲底层是怎么设置USB OTG模式<[RK3568 Android11] 教程之USB OTG模式切换>,此篇开始讲解怎么在设置应用->开 ...
- 机械设计手册2[1].0的关于要插盘的问题的解密文件
[转贴 2006-04-17 19:27:48 机械设计手册2[1].0的关于要插盘的问题的解密文件 机械设计手册(软件版)R2.0要插盘问题的解决办法!10秒钟搞定!1.开始菜单/运行. 2.在打开 ...
- [RK3568 Android11] 开发之内置默认中文输入法(谷歌输入法)
总目录链接:[RK3568 Android11] 本专栏说明和总目录 目录 前言 一.下载拼音输入法软件 二.内置谷歌输入法APP
最新文章
- python字典去重
- git 远程分支创建与推送
- css float(脱离正常流:向左/右浮动直到父元素/另一float, 不占空间)
- Jerry Wang 2013年几篇比较受欢迎的SAP社区博客
- android传感器获取运动方向,Android开发者指南-运动传感器Motion Sensor[原创译文]...
- mongodb中Gson和java##Bean对象转化类
- 大厂十年研发经历,总结了12条安卓开发条经验
- ng机器学习视频笔记(十三) ——异常检测与高斯密度估计
- java 找序列最小值_【C++编程练习】任意给定 n 个有序整数,求这 n 个有序整数序列的最大值,中位数和最小值...
- golang中tcp socket粘包问题和处理
- 免费网站推广,网站推广的方法
- 东财《组织行为学B》综合作业
- Android View绘制6 Draw过程(下)
- ASP.NET 安全认证(二)——灵活运用 Form 表单认证中的 deny 与 allow 及保护 .htm 等文件(转)...
- pandas入门与数据准备与简单筛选统计
- 工程伦理学_笔记(复习用)
- supervisor 初探
- 我的世界自制mod{1}
- 批量删除某网站上传的题库
- 期货价格和点价(期货 点价)