本文转载自:https://blog.csdn.net/tangzhihai0421/article/details/53487208

Android L后默认的usb连接模式为“仅充电”,而且不会随用户每次的选择而记住,假如需要修改默认的usb连接模式并且需要记住用户的选择,需要修改以下一些代码:

1.需要把mk文件中的

persist.sys.usb.config=mtp

这样默认的连接模式就为MTP,但是修改此处后usb电脑手机重启后会在PC端显示两个手机储存】、

2.此时需要修改
packages/providers/MediaProvider/src/com/android/providers/media/MtpService.java

 
public class MtpService extends Service {
         public void onStorageStateChanged(String path, String oldState, String newState) {
             synchronized (mBinder) {
                 Log.d(TAG, "onStorageStateChanged " + path + " " + oldState + " -> " + newState);
+                if (Environment.MEDIA_MOUNTED.equals(newState)
+                        && Environment.MEDIA_MOUNTED.equals(oldState)
+                        && mVolumeMap.containsKey(path)) {
+                    Log.d(TAG, "avoid adding storage twice.");
+                    return;
+                }
                 if (Environment.MEDIA_MOUNTED.equals(newState)) {
                     volumeMountedLocked(path);
                 } else if (Environment.MEDIA_MOUNTED.equals(oldState)) {

增加以上代码,就不会在PC端显示两个手机储存

3.修改以上两处后,每当用户开机第一次是mtp模式,但是连接一次后,第二次及以后连接都会是“仅充电”模式,此时还要修改

frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java

@Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case MSG_UPDATE_STATE:
                    mConnected = (msg.arg1 == 1);
                    mConfigured = (msg.arg2 == 1);
                    if (!mConnected) {
                        // When a disconnect occurs, relock access to sensitive user data
                        mUsbDataUnlocked = false;
                    }
                    if (mConnected && (isUsbShouldActived())) {
                        //setEnabledFunctions(null, false);                        
                    } else if(mConnected && isLock) {
                        setEnabledFunctions(mCurrentFunctions, false);
                        updateAdbNotification();
                    } else {
                        updateUsbNotification();
                        updateAdbNotification();
                    }
                    if (UsbManager.containsFunction(mCurrentFunctions,
                            UsbManager.USB_FUNCTION_ACCESSORY)) {
                        updateCurrentAccessory();
                    } else if ((!mConnected && !mCurrentFunctions.equals(UsbManager.USB_FUNCTION_NONE)) || mPowerDisconnected) {
                        // restore defaults when USB is disconnected
                        //setEnabledFunctions(null, false);                        
                    }

注释掉红色部分的代码就可以了

       
#modify by tangzhihai 20161101 form "mass_storage" to "mtp" 71
      PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \ 72
      »       persist.sys.usb.config=mtp
个人分类: settings

默认连接电脑的模式为MTP【转】的更多相关文章

  1. 手机通过数据线连接电脑后,找不到设备--Android Studio

    手机通过数据线连接电脑后,找不到可用的设备.允许USB调试,,因为小米手机还要设置USB开发者模式. 1.打开设置/关于手机 四次点击“MIUI版本”如图: 2.返回上一页打开更多设置 看到开发者选项 ...

  2. 连接电脑时,无法启用USB调试

    原因: 手机悬浮球 解决方案: 取消悬浮球,停止一切悬浮应用 (下面的废话可以不听) 预置条件: 手机已经打开开发者模式 开启USB调试模式 电脑能检测到手机 故事背景: 经常用手机连接电脑进行adb ...

  3. 修改 EF的默认连接工厂为 Sql Server 而不是LocalDb

      当你用EF6创建一个新项目,不知你是否注意到默认的连接字符串使用了LocalDb而不是SQLServer.但你如果想把默认连接改用SQLSErver而不是LocalDb.这个其实很简单:只需修改下 ...

  4. 修改Linux默认启动级别或模式的方法

    冲动的惩罚: 海阔天空: 在linux系统的7种启动级别,默认为X-Window,类似于Windows的窗口模式. 如何修改或变更linux的默认启动级别或模式呢? 以root身份进入Linux,修改 ...

  5. ADS的默认连接分析及编译器产生符号解惑

    ADS的默认连接顺序是怎样的呢?例如下边从2440init.s中摘出的编译器符号又该怎样理解呢? BaseOfROM    DCD    |Image##RO##Base| TopOfROM      ...

  6. QSqlDatabase::addDatabase第一次运行的时候,生成SQLite文件的同时会产生一个默认连接

    QSqlDatabase::addDatabase第一次运行的时候,生成SQLite文件的同时会产生一个默认连接: QSqlDatabase database = QSqlDatabase::addD ...

  7. 【android】安卓手机连接电脑了,但是adb devices找不到设备及找到设备但无权限的问题

    安卓手机连接电脑的时候,会遇到adb连接失败,adb devices为空,或者连接成功,但是显示unauthorized的情况.遇到这种情况,一般认为是手机驱动安装失败,会选择重新下载安装驱动,如果还 ...

  8. Spring Boot之默认连接池配置策略

    注意:如果我们使用spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa “starters”坐标,Spring Boot将自动配置Hikari ...

  9. centos7 默认进入系统命令行模式修改

    systemctl get-default  #查看系统启动进入默认模式 systemctl set-default graphical.target #改成默认进入 图形界面模式 systemctl ...

随机推荐

  1. js保留几位小数

    function reservedDecimal(val, digit) { return Number(val).toFixed(digit);} 调用 reservedDecimal(10,2); ...

  2. 从外部访问 Template (模板)的控件、获取它的属性值

    DataTemplate 和 ControlTemplate 两个类均派生自 FrameWorkTemplate类.这个类有个 FindName方法 供我们查询内部控件.  ControlTempla ...

  3. JEECMS 2.4.2 之添加新的可扩展的ftl模版文件、自定义方法

    Demo: <@cms.CfgList isPage='1' league='0' recommend='0' lala='0' hot='1' memberId='0' pageNo=page ...

  4. Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权)

    Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权) 问题分析:数据库还原的时候还有其他进程连在上面,导致无法获得独占造成的. 解决方案: 一.切断连接进程 .查询要还原的数据 ...

  5. POJ 1861 &amp; ZOJ 1542 Network(最小生成树之Krusal)

    题目链接: PKU:http://poj.org/problem?id=1861 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...

  6. Windows Azure 免费初体验 - 创建部署网站

    前几天在看到有个学Windows Azure课程,送Windows Azure的活动,课程地址:http://www.microsoftvirtualacademy.com/ 在活得体验资格后,就迫不 ...

  7. [Spring Data MongoDB]学习笔记--注册一个Mongo实例

    1. 通过Java based bean metadata @Configuration public class AppConfig { public @Bean Mongo mongo() thr ...

  8. 1804 小C的多边形

    1804 小C的多边形 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 小C偶然发现了一个奇妙的n个点的多边形.现在你需要给外圈的边标记上1~n-1,里圈的边也标记 ...

  9. Java中Solr集群的测试

    import org.apache.solr.client.solrj.impl.CloudSolrServer; import org.apache.solr.common.SolrInputDoc ...

  10. golang 模板(template)的常用基本语法

    1. 模板 在写动态页面的网站的时候,我们常常将不变的部分提出成为模板,可变部分通过后端程序的渲染来生成动态网页,golang提供了html/template包来支持模板渲染. 这篇文章不讨论gola ...