关于2sdcard的内外切换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010586698/article/details/71731627

首先在mtk关于2sdcard中都集中用宏控制

Feature. MTK_SHARED_SDCARD

Feature. MTK_2SDCARD_SWAP

If(Feature.MTK_SHARED_SDCARD&&!Feature. MTK_2SDCARD_SWAP)表示不适用2sdcard方案,反之则表示使用。

当adbshell的时候,就会发现有很多和sdcard相关的文件

/mnt/sdcard

根目录下有sdcard

/storage/sdcard

/storage/emulated/0都指向的是同一个文件,其目录就在/mnt/sdcard下,其他的就类似于windows中的快捷方式,

      当使用2sdcard的时候此时外部存储卡路径就是/storage/sdcard0,内部存储卡的路径就为/storage/sdcard1,为什么要这么做?原因是由于手机内部的存储卡太小,而外部存储卡一般都是很大,mtk为了解决这一问题,就有了这一方案,当插卡的时候就自动将/storage/sdcard0默认为外部存储卡,这样无论是安装apk在,或者启动应用时所要建立的文件夹都默认在这个比较大的卡内。

2sdcard的实现流程

          Mountservice中在handleSystemReady()启动线程,该线程来读取t卡是否插入,handleSystemReady()是系统启动完后会调用该函数,MountServiceBinderListender()来监听t卡是否插入,handleSystemReady()所启动的线程是反复的获得t卡插入时候的路径,之后再进入updatedefaulepath()来修改路径,如果t卡插入,则将外部存储器修改为/mnt/sdcard0,如果没有插入则就将内部存储器修改为/mnt/sdcard0

之后在setting界面中的存储通过memory.java调用,注册mDynSwapReciever函数来接受ACTION_DYNAMIC_SD_SWAP消息,该函数最后会调用到dynamicShowDefaultWriteCategory().来显示StorageEventListener来实现监听,当开机后有插拔t卡的动作时候,会及时反应,之后会调用到,StorageManagerex来设置路径。

 

猜你喜欢

转载自blog.csdn.net/u010586698/article/details/71731627
今日推荐