当前位置: 首页 > news >正文

android 定制mtp连接外设的设备名称

软件平台:Android11

硬件平台:QCS6125

    需求:同一套代码基线支持多个产品型号,如S2N、S2C、E1等,但是编译的时候model属性字段在build目录就是配置好不可再更改的,如何动态的实现展示不同的mtp设备名称呢?

主要涉及两个部分的代码变更:

1、framework目录相关改动:

diff --git a/media/java/android/mtp/MtpDatabase.java b/media/java/android/mtp/MtpDatabase.java
index 798bf6e2f8e..a63e4229317 100755
--- a/media/java/android/mtp/MtpDatabase.java
+++ b/media/java/android/mtp/MtpDatabase.java
@@ -665,13 +665,28 @@ public class MtpDatabase implements AutoCloseable {
         }
     }
 
+    private String getDeviceName() {
+        String devDefName = "S2";
+        String devS2N = "S2N";
+        String getName = null;
+
+        getName = SystemProperties.get("ro.product.yfdsubmodel");
+        if (null == getName) return devDefName;
+
+        if (getName.contains("S2N"))
+            return devS2N;
+        else
+            return devDefName;
+    }
+
     @VisibleForNative
     private int getDeviceProperty(int property, long[] outIntValue, char[] outStringValue) {
         switch (property) {
             case MtpConstants.DEVICE_PROPERTY_SYNCHRONIZATION_PARTNER:
             case MtpConstants.DEVICE_PROPERTY_DEVICE_FRIENDLY_NAME:
                 // writable string properties kept in shared preferences
-                String value = mDeviceProperties.getString(Integer.toString(property), "");
+                //String value = mDeviceProperties.getString(Integer.toString(property), "");
+                String value = getDeviceName();
                 int length = value.length();
                 if (length > 255) {
                     length = 255;

    上述submodel属性是系统首次启动init根据内核硬件检测初始化的boardid值去初始化的,用于区分细微硬件差别。

2、packages/services/Mtp目录改动:

diff --git a/src/com/android/mtp/MtpService.java b/src/com/android/mtp/MtpService.java
index 8520b9e..1fa1aaa 100644
--- a/src/com/android/mtp/MtpService.java
+++ b/src/com/android/mtp/MtpService.java
@@ -32,6 +32,7 @@ import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
+import android.os.SystemProperties;
 import android.os.storage.StorageEventListener;
 import android.os.storage.StorageManager;
 import android.os.storage.StorageVolume;
@@ -165,6 +166,27 @@ public class MtpService extends Service {
         return START_REDELIVER_INTENT;
     }
 
+    private String getDeviceName() {
+        String devDefName = "S2";
+        String getName = null;
+
+        getName = SystemProperties.get("ro.product.yfdsubmodel");
+        if (null == getName) return devDefName;
+
+        if (getName.contains("S2N"))
+            return "S2N";
+        else if (getName.contains("S2C"))
+            return "S2C";
+        else if (getName.contains("S2A"))
+            return "S2A";
+        else if (getName.contains("S3"))
+            return "S3";
+        else if (getName.contains("E1"))
+            return "E1";
+        else
+            return devDefName;
+    }
+
     private synchronized void startServer(StorageVolume primary, String[] subdirs) {
         if (!(UserHandle.myUserId() == ActivityManager.getCurrentUser())) {
             return;
@@ -200,10 +222,14 @@ public class MtpService extends Service {
                 fd = controlFd.getFileDescriptor();
             }
 
+            //final MtpServer server =
+            //        new MtpServer(database, fd, mPtpMode,
+            //                new OnServerTerminated(), Build.MANUFACTURER,
+            //                Build.MODEL, "1.0");
             final MtpServer server =
                     new MtpServer(database, fd, mPtpMode,
                             new OnServerTerminated(), Build.MANUFACTURER,
-                            Build.MODEL, "1.0");
+                            getDeviceName(), "1.0");
             database.setServer(server);
             sServerHolder = new ServerHolder(server, database);

    之所以需要此改动,是因为我本地一台windows一台mac,改动第一条,在win生效,但是在mac没效果,添加第二条改动后,mac显示也正常。

http://www.dtcms.com/a/26120.html

相关文章:

  • HarmonyOS全栈开发指南:从入门到精通,构建万物智联的未来生态(三)
  • 【模板】图论 最短路 (Floyd+SPFA+Dijkstra)
  • QT C++ new QTableWidgetItem 不需要删除指针
  • IDEA CodeGPT 使用教程
  • Qt QToolBox 组件总结
  • MySQL 事务:确保数据一致性的核心机制
  • 基于知识图谱的问答系统:后端Python+Flask,数据库Neo4j,前端Vue3(提供源码)
  • 【JavaEE进阶】Spring MVC(3)
  • C# 实现完善 Excel 不规则合并单元格数据导入
  • Cherry-Studio下载安装教程,AI面向开发者的工具或平台(付安装包)
  • R软件用潜在类别混合模型LCM分析老年人抑郁数据轨迹多变量建模研究
  • C++效率掌握之STL库:list函数全解
  • el-select:有关多选,options选项值不包含绑定值的回显问题
  • AI前端开发技能提升与ScriptEcho:拥抱智能时代的新机遇
  • 基于Java EE“陕西农特产品”网络交易平台设计与实现(源码+文档)
  • 乾崑版再添两大版型,全新岚图梦想家推动高阶智驾平权
  • 为什么视频编码是对YUV而不是RGB
  • 零基础学python(持续更新中。。。)
  • 市场波动中的数据分析与策略优化
  • 寒假总结。
  • JAVA中常用类型
  • 网页五子棋——对战前端
  • Qt:容器类控件
  • 51c深度学习~合集1
  • jdk从1.7升级为1.8需要注意什么
  • uniapp基于JSSDK 开发微信支付(php后端)
  • 23种设计模式之《单例模式(Singleton)》在c#中的应用及理解
  • BUUCTF [CISCN 2019 初赛]Love Math
  • ONNX Runtime 与 CUDA、cuDNN 的版本对应
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter17-事件