无法在Android上的外部存储上创建文件夹
我的开发手机是 ,正在运行。Nexus 5
Android 4.4.2
在我的应用程序中,我尝试在外部存储上创建一个文件夹,该文件夹将存储应用程序的调试信息。基本上,它将包含应用程序执行的所有命令,因此当用户遇到问题时,我可以选择让他们从调试文件夹中向我发送要分析的信息。
我首先尝试将文件写入文件夹,但发现创建文件夹时出错。起初我使用的是,然后我转到了也不起作用的地方。mkdir()
mkdirs()
我在我的显现中。<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
以下是创建文件夹的代码:
File folder = new File(Environment.getExternalStorageDirectory() + "/DebugData");
String path = folder.getPath();
if(!folder.mkdirs() || !folder.exists()){
Log.e(LOG_TAG, path + " failed");
} else {
Log.d(LOG_TAG, path + " succeeded");
}
以下是我也尝试过的:
//Check SD card state
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || !Environment.MEDIA_MOUNTED.equals(state)) {
Log.e(LOG_TAG, "Error: external storage is read only or unavailable");
} else {
Log.d(LOG_TAG, "External storage is not read only or unavailable");
}
这将返回外部存储不是只读的或不可用的。
我也尝试过不同的路径,例如File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Folder1");
这就是它变得非常令人困惑的地方。
我尝试在不同的手机上进行开发。首先,我抓住了一个跑步,它起作用了。我能够创建文件夹并写入它们。这向我表明代码正在工作。此外,在S4和Nexus 5上运行代码返回的路径是相同的。Galaxy S4 GT-i9505
Android 4.2.2
然后我认为它可能是Android版本特定的。所以我抓住了一个,代码也处理了它。创建了文件夹并允许我写入它们。Nexus 4
Android 4.4.2
没有一部手机是扎根的,都是库存标准。在Nexus 5上,没有特殊的应用程序或任何我能想到的会导致权限问题的设置。连接设置为“媒体设备 (MTP)”。
编辑:
我应该补充一点,我已经尝试了以下方法,但同样不起作用:
- 将文件写入外部存储的根目录
- 在外部存储根目录中创建文件并写入该文件
- 在勾勒出的路径中创建文件夹并向其写入文件
- 在概述的路径中创建文件并写入其中
我对导致此问题的原因感到困惑,还有其他可以测试或更改以解决问题的内容吗?
编辑2:
事实证明,我认为这个问题是由于索引造成的。
基本上,我测试的所有其他设备都允许我重新连接USB连接并查看创建的文件和文件夹。
由于某种原因,我的Nexus 5不会索引文件夹/文件,即使它们存在。
我下载了一个不同的第三方文件浏览器应用程序,并注意到所有的文件夹和文件都在那里。
因此,要通过USB调试查看这些文件夹和文件,我必须重新启动手机才能重新索引它们,这似乎很烦人,但总比它根本不起作用要好。
谢谢。