我的开发电话正在Nexus 5运行Android 4.4.2。
在我的应用程序中,我试图在外部存储上创建一个文件夹,该文件夹将存储我的应用程序的调试信息。基本上,它将包含应用程序执行的所有命令,因此,当用户遇到问题时,我可以选择使它们从debug文件夹发送信息给我进行分析。
我首先尝试将文件写入文件夹,但发现创建文件夹时出错。最初,我使用mkdir(),然后又移至mkdirs()也不起作用。
我有
/>我的清单。
这是用于创建文件夹的代码:
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");
这就是真正令人困惑的地方。
我尝试在其他手机上进行开发。首先,我抢了一辆Galaxy S4 GT-i9505跑步鞋,Android
4.2.2而且效果很好。我能够创建文件夹并将其写入。这告诉我代码在起作用。另外,通过在S4和Nexus 5上运行代码返回的路径是相同的。
然后我认为这可能是特定于android版本的。因此,我抓住了一个Nexus 4with Android
4.4.2,代码也可以使用它。创建了文件夹,并允许我写信给他们。
这些手机均未扎根,并且均为库存标准。Nexus 5上没有特殊的应用程序或任何我认为可以引起权限问题的明智设置。连接设置为媒体设备(MTP)。
编辑:
我还要补充一点,我尝试了以下方法,但也没有用:
将文件写入外部存储的根目录
在外部存储根目录中创建文件并将其写入
在概述的路径中创建文件夹并向其中写入文件
在概述的路径中创建文件并将其写入
我对造成这种情况的原因感到困惑,是否可以测试或更改其他任何方法来解决此问题?
编辑2:
事实证明,该问题是由于索引所致。
基本上,我测试过的所有其他设备都允许我重新连接USB连接并查看创建的文件和文件夹。
由于某种原因,我的Nexus 5无法为文件夹/文件建立索引,即使它们存在也是如此。
我下载了另一个第三方文件浏览器应用程序,并注意到所有文件夹和文件都在其中。
因此,要通过USB调试来查看这些文件夹和文件,我必须重新启动手机才能为它们重新编制索引,这似乎很烦人,但总比不工作要好。
谢谢。