当前位置: 首页 > 面试题库 >

无法在Android的外部存储上创建文件夹

魏臻
2023-03-14
问题内容

我的开发电话正在Nexus 5运行Android 4.4.2

在我的应用程序中,我试图在外部存储上创建一个文件夹,该文件夹将存储我的应用程序的调试信息。基本上,它将包含应用程序执行的所有命令,因此,当用户遇到问题时,我可以选择使它们从debug文件夹发送信息给我进行分析

我首先尝试将文件写入文件夹,但发现创建文件夹时出错。最初,我使用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");

这就是真正令人困惑的地方。

我尝试在其他手机上进行开发。首先,我抢了一辆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调试来查看这些文件夹和文件,我必须重新启动手机才能为它们重新编制索引,这似乎很烦人,但总比不工作要好。

谢谢。


问题答案:

就这是Nexus的索引编制问题而言,这对我来说很有效:

MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null,
        new MediaScannerConnection.OnScanCompletedListener() {
            public void onScanCompleted(String path, Uri uri) {
                Log.i("ExternalStorage", "Scanned " + path + ":");
                Log.i("ExternalStorage", "-> uri=" + uri);
            }
});

创建和保存文件后,应直接html" target="_blank">调用它。通过使用扫描仪,只需将设备重新插入即可查看新创建的文件和目录。

根据文档:

MediaScannerConnection为应用程序提供了一种将新创建或下载的媒体文件传递到媒体扫描器服务的方式。媒体扫描程序服务将从文件中读取元数据,并将文件添加到媒体内容提供程序中。

希望这对其他人有帮助。



 类似资料:
  • 众所周知,谷歌颠覆了Android11的授权概念,并彻底改变了它。 我看了Android留档丛林,但没有找到答案的问题是否仍然可以在外部存储(名为 /storage/emulated/0/)的根目录中创建一个文件夹。如果是,如何? 我的应用在Android上写 临时解决办法可以是这样的: 但这并不理想。如果用户从Android10切换到Android11,那么就有一个大问题。我需要什么额外的代码才

  • 问题内容: 我看到很多其他人都在问同样的问题,但是没有发布的解决方案对我有帮助。 我正在尝试从我的Android应用程序将(二进制)文件写入外部存储。我输入了清单,但仍然无法创建任何文件。我用来创建文件的代码是 对的调用失败,并引发(ENOENT,因为该目录不存在) 有人知道怎么回事吗?我什至尝试过重启设备。如果有任何区别,我使用的是Nexus 7的API级别8。 问题答案: 首先,您应该检查Ex

  • 我是android新手,有时找不到合适的解决方案,这就是其中之一。 我写了一个简单的应用程序来编写使用ITextPdf libray生成的内部pdf。这工作得很好,我可以从设备文件资源管理器中看到pdf文件。现在我正在使用外部存储做同样的事情,但在这种情况下,我不能在下载文件夹中生成文件。我找到了对我的代码不起作用的解决方案。 我的代码: java文件 我在中发现了问题。它返回-1,但我不明白它不

  • 我的舱单中有权限条目: 编辑:我正在使用sdk 23

  • 我正在尝试创建一个目录和文件,以便可以存储从Internet下载的文件。但是,我无法在外部公共存储中创建目录和文件。如果我写入外部私有存储(应用程序的特定存储位置),我完全可以这样做。 代码如下: 上面的代码导致: 09-13 05:33:45.258 5867-5867/? I/S。出来﹕ /存储/0CED-0F09/图片 09-13 05:33:45.260 5867-5867/? I/S。出

  • 我在牛轧糖上开发了一个应用程序,可以在外部存储中创建一个目录。 我以前是这样做的: 此代码似乎不适用于API 26(Android Oreo)。该目录未创建。 我如何才能实现同样的目标,最好是在API 21到API 26的所有android版本上都能实现?