Nexus 4没有通过MTP显示文件

moo*_*ese 78 android usb-drive mtp nexus-4

我正在尝试简单地将一个简单的XML文件写入SD卡,我注意到我的Nexus 4确实写了该文件,但是使用Windows 7无法通过MTP协议查看.

码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    CustomerQueryRqType customerQueryRequest = new CustomerQueryRqType();
    Serializer serializer = new Persister();
    File myFile = new File(Environment.getExternalStorageDirectory() + "/customerQueryRequest.xml");

    try {
        boolean created = myFile.createNewFile();
        serializer.write(customerQueryRequest, myFile);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用Astro文件管理器在手机上看到该文件:

截图

但Windows没有看到它......:

截图

adb shell 在目录中显示:

ls -l
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Alarms
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Android
drwxrwxr-x root     sdcard_rw          2012-11-21 19:30 DCIM
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Download
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Movies
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Music
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Notifications
drwxrwxr-x root     sdcard_rw          2012-11-19 12:06 Pictures
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Podcasts
drwxrwxr-x root     sdcard_rw          2012-11-19 13:22 Ringtones
drwxrwxr-x root     sdcard_rw          2012-11-19 14:33 bluetooth
-rw-rw-r-- root     sdcard_rw       79 2012-12-05 22:26 customerQueryRequest.xml
drwxrwxr-x root     sdcard_rw          2012-11-20 02:50 data
-rw-rw-r-- root     sdcard_rw    11394 2012-11-19 13:54 eightpen_custom_gestures
drwxrwxr-x root     sdcard_rw          2012-11-19 13:17 media
Run Code Online (Sandbox Code Playgroud)

我的Nexus 4发生了什么?为什么它会从Windows隐藏我的东西?

Kev*_*nko 71

似乎是影响通过MTP进行Android USB文件访问已知问题.MTP缓存已过期,直到重新启动手机.

一个解决办法是:

  • 清除"媒体存储"应用的数据
  • 使用SDrescanSD扫描仪(也适用于Android 4.4/5,在F-Droid上可用)应用程序强制更新

或者完全避免使用USB.该问题不会影响其他访问文件的方法.例如,尝试使用AirDroid传输文件.


注意:这不适用于Android 5.0.2:清除"媒体存储"并使用SD重新扫描程序后,Windows 7中的文件夹将显示为无法打开的4K文件.此时唯一的解决方案是再次清除媒体存储并重启设备

  • 安装SDrescan,运行它:修复!非常感谢 (2认同)

Sat*_*esh 44

文件关闭后,您可以使用以下代码

MediaScannerConnection.scanFile(this, new String[] { file.getAbsolutePath() }, null, null);
Run Code Online (Sandbox Code Playgroud)

来源:https: //code.google.com/p/android/issues/detail?id = 38282

  • 完善.这应该是这个问题的解决方案. (11认同)

lvi*_*ani 5

花了几个小时解决这个问题后,我这样解决了:

private void rescanFolder(String dest) {
    // Scan files only (not folders);
    File[] files = new File(dest).listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            return pathname.isFile();
        }
    });

    String[] paths = new String[files.length];
    for (int co=0; co< files.length; co++)
        paths[co] = files[co].getAbsolutePath();

    MediaScannerConnection.scanFile(activity, paths, null, null);

    // and now recursively scan subfolders
    files = new File(dest).listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            return pathname.isDirectory();
        }
    });

    for (int co=0; co<files.length; co++)
        rescanFolder(files[co].getAbsolutePath());
} 
Run Code Online (Sandbox Code Playgroud)

事实是,您只需要扫描文件(而不是文件夹),然后对每个文件夹进行递归重复

编辑 此外,如果您不希望将图片添加到相册中(而是仅将内容通过mtp协议显示),请记住.nomedia在重新扫描之前将一个空文件放在文件夹中,如下所示:

new File(myFolder + File.separator + ".nomedia").createNewFile();
rescanFolder(myFolder);
Run Code Online (Sandbox Code Playgroud)