无法访问 Android (MTP) 中公用文件夹中存储的文件
Posted
技术标签:
【中文标题】无法访问 Android (MTP) 中公用文件夹中存储的文件【英文标题】:Can't access stored files in public folder in Android (MTP) 【发布时间】:2015-07-08 10:18:57 【问题描述】:我想在 android 中保存一个简单的.txt
文件,然后我想将此文件从设备复制到将设备安装为 MTP 设备的 PC。
我拥有两台 Android 设备:
Nexus 4,Stock Android 5.0.1 Nexus 7 2012,CyanogenMod 12,Android 5.0.2为了确保这不是 Nexus 设备错误,我尝试了朋友的 Wiko 手机。
我使用此代码将文件保存到外部存储上的“下载”文件夹中。建议在开发人员页面上使用。
private void saveData()
String fileName = "test.txt";
String writeString = "Hello World";
File filePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File saveFile = new File(filePath, fileName);
saveFile.setReadable(true);
try
boolean result = saveFile.createNewFile();
if(result == true)
Log.i(TAG, "File successfully created");
else
Log.i(TAG, "Error. File not created");
BufferedWriter writer = new BufferedWriter(new FileWriter(saveFile));
writer.write(writeString);
writer.close();
catch(Exception e)
Log.e(TAG,e.toString());
我使用以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
当我使用 MTP 连接到设备时,我得到一个空的下载文件夹,但是当我通过 Android 中的文件浏览器(在我的情况下是 ES 文件浏览器)访问该文件夹时,我可以看到文件和内容。所以我认为创建文件并写入它是可行的。
创建文件时,我收到正确的日志:“文件已成功创建。”
【问题讨论】:
MTP 依赖于 MediaStore 知道文件。您应该在新创建的文件上调用 MediaScanner。 ***.com/questions/14449509/… 关闭/打开您的设备也可以解决问题。请将 MTP 放在帖子的主题中。 感谢 greenapps,它对我有用。 【参考方案1】:你需要把文件添加到MediaStore
:(相当多的代码...)
try
new MediaScannerConnectionClient()
private MediaScannerConnection mMs;
public void init()
mMs = new MediaScannerConnection(myContext, this);
mMs.connect();
@Override
public void onMediaScannerConnected()
File pathFile = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File scanFile = new File(pathFile, "test.txt");
mMs.scanFile(scanFile.getAbsolutePath(), null); // <-- repeat for all files
mMs.disconnect();
@Override
public void onScanCompleted(String path, Uri uri)
.init();
catch(Exception e)
// Device does not support adding files manually.
// Sending Broadcast to start MediaScanner (slower than adding manually)
try
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
catch(Exception ee)
// Something went terribly wrong.
// Can't add file to MediaStore and can't send Broadcast to start MediaScanner.
【讨论】:
如果您确实找到了解决方案,如果您自己发布了一个答案并将其标记为已接受,那么它将对其他人非常感激和有用。 :)以上是关于无法访问 Android (MTP) 中公用文件夹中存储的文件的主要内容,如果未能解决你的问题,请参考以下文章