把android手机插上电脑,有的时候会看不到你想看到的文件,例如:new File产生的文件,某些软件下载同步的文件。
这让人很恼火,在网上搜索了一下,有几个行之有效的方案:
1,重启手机----笔者测试通过
2,如果是外置SD卡,在“设置”->"存储"里,选择卸载SD卡,然后再挂载----笔者写这篇文章的时候,还没有测试,晚上会进行测试并更新测试结果。
3,在“设置”->"存储"里,“内部存储空间”这个栏目里,有个一个刷新的按钮,点击它----笔者测试通过。
4,下载一个软件SDRescan,在插上电脑之前运行一下----笔者没有测试,据一些网友反馈是可行的,但是目前尚不支持android4.4。
5,如果你是连接上之后,所有文件都看不见了,那么,你需要查看所有应用,找到“媒体存储”这个应用(英文大概叫做MediaStorage,没有严格的求证),检查是否已经启用。
然后执行方案3。
有了上述的解决办法,我们来讨论下这个问题的来龙去脉:
目前大家插上电脑,通常的连接方式都是MTP。一般在插上电脑的时候,手机的状态栏可以供用户选择是以MTP(媒体设备)方式连接还是以PTP(相机)。
通常在进行文件操作的时候,大家会使用MTP,而MTP并非传统的磁盘模式,因为手机存储的速度没有那么快,所以google对MTP建立了一个缓存。
每次连接电脑其实都是读取的缓存,如果手机上的文件有更新却没有刷新缓存,就会出问题。
我们目前讨论的就是上面这个现象造成的问题。
Google的一些开发者给出的方案是:在创建文件的时候,添加一行代码:
MediaScannerConnection.scanFile(this, new String[] { file.getAbsolutePath() }, null, null);这个方法会刷新缓存。参考:https://code.google.com/p/android/issues/detail?id=38282
但是这么一来,其实是把问题推给了所有的android的应用了:你们的app代码写的有问题!
所以大家除了抱怨google之外,能做的就是想办法来刷新这个缓存。思路基本上是:
1,缓存是“媒体存储”这个应用建立的
2,这个应用活着才能正常使用
3,让他死,再活:a,重启,行之有效;b,停止掉再启动这个应用,无效,没有触发刷新;
4,手动刷:卸载设备再重新挂载,对于外置sd卡是有效的,内置的操作简单不了,有其他限制。
5,刷新存储设备,就是上面提到的方案3.
6,集成刷,做成应用来刷,就是上面提到的方案4;
7,自己来,有些开发者根据问题原理,写了一个应用,也可以刷,源代码在:https://github.com/Sarkie/mtpfix
代码是有效的,但是设计的不太好,可以进行优化,有精力、有条件的朋友可以优化一下。