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缓存已过期,直到重新启动手机.
一个解决办法是:
或者完全避免使用USB.该问题不会影响其他访问文件的方法.例如,尝试使用AirDroid传输文件.
注意:这不适用于Android 5.0.2:清除"媒体存储"并使用SD重新扫描程序后,Windows 7中的文件夹将显示为无法打开的4K文件.此时唯一的解决方案是再次清除媒体存储并重启设备
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
花了几个小时解决这个问题后,我这样解决了:
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)
| 归档时间: |
|
| 查看次数: |
64922 次 |
| 最近记录: |