无法在 SD 卡上写入文件

2023-12-02

我试图在 SD 卡上写入照片,但没有成功。

我已经获得了在可移动存储中写入的权限,并且 SD 卡已安装。

另外,我检查了 SD 卡的路径是否存在,并且得到了肯定的结果。

失败的地方是当我使用mkdir()功能。它返回 false 并且没有创建文件。

我已经在三星 A6(棉花糖)和三星 Tab4(棒棒糖)上进行了测试

这是我用来检索 SD 卡路径的代码片段。
因为标准程序不适用于三星设备,所以我使用的是从 stackoverflow 答案中获取的这段代码

三星 A6 中此函数返回的路径是 /storage/6DD9-1D15。

public String[] getStorageDirectories() {
    String[] storageDirectories;
    String rawSecondaryStoragesStr = System.getenv("SECONDARY_STORAGE");

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        List<String> results = new ArrayList<String>();
        File[] externalDirs = getApplicationContext().getExternalFilesDirs(null);
        for (File file : externalDirs) {
            String path = file.getPath().split("/Android")[0];
            if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && Environment.isExternalStorageRemovable(file))
                    || rawSecondaryStoragesStr != null && rawSecondaryStoragesStr.contains(path)) {
                results.add(path);
            }
        }
        storageDirectories = results.toArray(new String[0]);
    } else {
        final Set<String> rv = new HashSet<String>();

        if (!TextUtils.isEmpty(rawSecondaryStoragesStr)) {
            final String[] rawSecondaryStorages = rawSecondaryStoragesStr.split(File.pathSeparator);
            Collections.addAll(rv, rawSecondaryStorages);
        }
        storageDirectories = rv.toArray(new String[rv.size()]);
    }
    return storageDirectories;
}

相反,这是我用来在 SD 卡下的 DCMI 目录中写入文件夹的代码(我将在其中放置照片)

public void mkFolder(String folderPath) { // make a folder under Environment.DIRECTORY_DCIM

    File folder = new File(folderPath);

    try {
        // MKDIRS returns false
        if (folder.mkdirs()) {
            Log.d(TAG, "folder created:" + folder.toString());
        } else {
            Log.d(TAG, "create folder fails:" + folder.toString());
        }
    } catch (Exception ecp) {
        ecp.printStackTrace();
    }
}

在 API 级别 18 及以下,您的getStorageDirectories()将经过其else堵塞。该块假设:

  • SECONDARY_STORAGE环境变量存在...这不是必需的
  • SECONDARY_STORAGE包含分隔的目录列表...这不是必需的
  • 目录列表与可移动存储选项匹配...这不是必需的
  • 您可以使用这些目录...这不是必需的

在 API 级别 19+ 上,您的getStorageDirectories()代码将通过其if堵塞。在那里,你开始很好,打电话getExternalFilesDirs()。如果该方法返回 2 个以上项目,则第二个和后续项目将指向可移动存储,并且特别指向可移动存储上可以读写的位置。然后,您的代码假设:

  • 该目录有一个/Android路径段...这不是必需的
  • 目录路径前面的部分/Android代表您可以在其中创建文件和目录的位置...这从来都不是真的

您没有对可移动存储的文件系统级访问权限,except in the specific由类似方法返回的目录getExternalFilesDirs().

所以,要么:

  • 坚持specific返回的位置getExternalFilesDirs(), or

  • 切换到使用存储访问框架,允许用户选择存储内容的位置(可能是也可能不是可移动存储)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 SD 卡上写入文件 的相关文章

  • Kotlin 协程异步延迟

    我正在研究 Kotlin Android 中的协程概念 因此 由于我不想使用 Timertask 延迟后的处理程序 所以我想使用协程在一定延迟后执行异步协程 我有以下半代码 launch UI val result async Common
  • 将 Apple Touch ID 或 Samsung 指纹识别器与我的应用程序集成

    我目前正在开发一个 Android ios 移动应用程序 它有以下要求 请告诉我是否可以使用最新的智能手机 平板电脑上内置的指纹识别器来实现我的要求 我有一个在云上运行的人力资源管理系统 其中有员工详细信息 现在我正在开发一个用于员工考勤的
  • Android Studio 拒绝运行 main()

    重现步骤 在Android Studio中启动一个新项目 使用最新更新 创建一个新类并像往常一样添加 main 右键单击类以运行 main 作为测试 package test public class Test public static
  • Android - 如何创建可点击的列表视图?

    我想让列表视图中的所有列表项打开到一个新页面 因此每个列表视图项目都打开到一个我可以使用的新黑色页面 我根本不知道如何实现这个 我已经连续搜索了几个小时 但找不到解决方案的答案 如果有人能够展示和 或解释如何执行此操作而不是提供链接 我们将
  • 切换大小写错误。用于 Mac 上 Android 开发的 Eclipse IDE:将工作区合规性更改为 JRE 1.7

    当尝试在 android 项目中使用带有 switch string 的 Switch Case 时 我在 eclipse IDE 中收到错误消息 将工作区合规性更改为 JRE1 7 对于低于 1 7 的源级别 无法打开字符串类型的值 仅允
  • ViewPager - 无限滚动? [复制]

    这个问题在这里已经有答案了 我需要在屏幕上显示文本或图像 文本或图像 一个请求总共 10 个 是通过 HttpClient 从我的服务器获取的 当用户向右滑动并到达第 8 张幻灯片时 我需要从服务器获取下一组 10 个文本或图像 使用 Vi
  • 有人知道如何在android中实现像Unfold(这是iphone中的应用程序)这样的效果吗?

    我怎样才能实现这个效果呢 任何建议都会对我有帮助 None
  • Android 和 Facebook 共享意图

    我正在开发一个 Android 应用程序 并且有兴趣了解如何使用 Android 的共享意图在应用程序内更新应用程序用户的状态 浏览过 Facebook 的 SDK 后 这似乎很容易做到 但是我很想允许用户通过常规的共享意图弹出窗口来做到这
  • 如何从 Android 服务获取应用程序上下文?

    我有一个正在运行并监听麦克风输入的 Android 服务 我希望它在满足特定条件时启动一项活动 为了创建意图 我需要应用程序上下文 我怎么才能得到它 Intent i new Intent ctx SONR class i addFlags
  • GPSTracker 类不工作

    我尝试在我的应用程序中使用我在网上找到的 GPSTracker 类 并且我之前让它工作过 但现在似乎莫名其妙地不起作用 public class GPSTracker extends Service implements LocationL
  • DP5 7.0 - 向待处理意图添加额外内容是否会失败?

    在跟踪器上添加链接的问题 因此 我今天在我的 Nexus 5X 上安装了 DP5 Android 7 0 版本 我一直在开发一个应用程序 它使用 Android 的 AlarmManager 类在特定时间安排本地通知 在此版本之前 代码在运
  • Motorola Android 2.2 相机忽略 EXTRA_OUTPUT 参数

    我以编程方式打开相机来拍摄视频 我告诉相机使用如下代码将视频文件放置到指定位置 Intent intent new Intent MediaStore ACTION VIDEO CAPTURE File out new File sdcar
  • HttpURLConnection.getResponseCode() 冻结执行/不会超时

    我正在编写一个 Android 应用程序 它连接到受密码保护的 cPanel 服务器 Apache 2 2 22 页面 当身份验证凭据正确时 我的连接没有问题 但是 当凭据不正确时 我的 Android 应用程序似乎会冻结在HttpURLC
  • Android 中带有传递参数的点击侦听器方法

    我是 Android 和 Java 新手 我想创建一个带有 int 参数的 onClick 方法 所以这是我的尝试 public void randomClick final int randomIndex private OnClickL
  • 为什么 CheckBox 检查不能以编程方式与 Kotlin 一起使用?

    我想这个问题以前可能有人问过 但这个问题也发生在我身上 所以我在这里再次询问 看看我们能否找到解决方案 所以基本上问题是以编程方式检查复选框不与 Kotlin 代码一起工作 为了解释一下 我正在分享我的代码和问题的屏幕截图 filterCo
  • 将 jstring 转换为 QString

    我正在调用一个返回字符串的 Java 函数 QAndroidJniObject obj QAndroidJniObject callStaticObjectMethod
  • 找不到 com.android.tools.build:gradle:3.0.0 [重复]

    这个问题在这里已经有答案了 当我尝试从命令行构建可能的 Android 项目时 我收到以下错误消息 配置项目 mylib 时出现问题 无法解析配置 mylib classpath 的所有文件 找不到 com android tools bu
  • okHttp3 java.lang.NoSuchMethodError:没有虚拟方法 setCallWebSocket

    我已从 okhttp Retrofit 更新到 okhttp3 Retrofit2 但我的应用程序因此异常而无法启动 FATAL EXCEPTION EventThread Process appli speaky com PID 1470
  • 查看 Android 应用程序的共享首选项?

    当我在 Eclipse 中处理我的应用程序时 有没有办法在模拟器中调试时查看我对应用程序的共享首选项所做的更改 提前致谢 在模拟器中运行项目 然后从 Eclipse 选择菜单 Windows gt 打开透视图 gt DDMS 从选项卡设备中
  • SDK管理器不显示示例包选项

    我关注的是安卓安装示例的开发人员链接 http developer android com tools samples index html包裹 但是 当我展开Android平台的包列表时 没有 SDK示例 选项 复选框 可用 为什么 我已

随机推荐

  • org.json.JSONException: JSONObject["address"] 不是 JSONArray

    我正在 java 中使用 org json 解析 json 我的 json 看起来像 address addressLine1 Noida addressLine2 UP firstName Achyut lastName khanna 我
  • Laravel Blade 在 php 中传递 Javascript 变量

    如何将 javascript 变量作为 php 循环中的变量传递 像这样的东西 显然不起作用 var myJsVar 100 for i 0 i
  • 确保 mongodb 中的索引

    一些问题 如果我在已经索引的字段上确保索引 它会重新索引还是简单地说 是的 我已经索引了 如果某些开发人员的机器上尚不存在该集合 mongo 会启动索引吗 我是否需要再次确保索引或者调用它一次就足够了 什么时候索引 安全 一定需要一些时间
  • 如何添加 NSMutableArray 中的所有十进制数字

    我有一个NSMutableArray其中有一些NSDecimalNumber在其中 就像 500 50 80 70 8000 现在我想添加所有这些decimal numbers一起 我尝试过使用 for NSDecimalNumber nu
  • 用表情符号替换表情符号

    我有一些文本 可能包括文本表情符号 例如 我想将它们替换为相应的表情符号 unicode 字符 and 对于上面的例子 我的目的是在此文本上运行 twimoji 我知道我可以查找和替换 但我宁愿使用已经预先构建的东西来执行此操作 有哪些库已
  • Qt 在“调试”模式下正确渲染此 SVG,但在“发布”模式下则不然

    我遇到了这个奇怪的问题 当我构建调试并链接调试 dll Qt 5 12 2 开源 时 我得到了预期的渲染 当我构建发布版本并链接到发布 dll 时 图像完全是空白的 该程序是从 MSVC 运行的 因此 dll 路径应该正确设置 有人知道发生
  • 如何使用 Python 将控制台输出重定向到 pyqt5 qplainTextEdit 小部件?

    我正在尝试在 PyQt5 的 QplainTextEdit 小部件中显示 python 脚本的控制台输出 我收到此错误 TypeError 调用元类基时出错 元类冲突 派生类的元类必须是其所有基类的元类的 非严格 子类 我已经在 pyqt
  • Protobuf 向后兼容性以及 proto3 与 proto2

    Protobuf 的卖点之一是向后兼容性 即开发人员可以改进格式 而老客户端仍然可以使用它 现在有了名为 proto3 的新 Protobuf 版本 IDL 语言本身不兼容 例如options required删除的地方是枚举的新语法 没有
  • Spring 4/5 全局 CORS 配置不起作用,给出“请求的资源上不存在“Access-Control-Allow-Origin”标头”

    我正在尝试通过以下方式登录http localhost 3000使用 HTTP POST 我得到以下信息 XMLHttpRequest 无法加载http localhost 8080 api auth 登录 请求的资源上不存在 Access
  • 如何通过在opencv python中单击鼠标按钮在正在播放的视频顶部绘制形状

    好吧 首先 我应该承认这是一个相当长的问题 我未能通过谷歌搜索找到可能的解决方案 我有一段视频 其中入侵者试图闯入栅栏的另一边 我可以追踪入侵者 但是当他在另一边时 我应该能够将入侵持续时间保存到文件中 入侵区域会是这样的 我认为这些步骤
  • 使用 getchar() 终止 while 循环

    对于我的家庭作业 我需要实现霍纳斯算法来在碱基之间进行转换 我被告知要使用getchar 对于这个任务 但我遇到一个问题 当我按 Enter 时 程序不会终止 只是接受更多字符 例子 bryce gt pa1 Enter the fromR
  • 知道 filename:line_no 导入 my_module 的位置

    我有一个模块my module它是由许多文件使用以下方式获取 导入 的 from my module import 在模块内部 我可以知道哪个文件导入了该模块吗 我想知道进行此导入的文件名 line no 所以我需要的代码是 my modu
  • 如何向 eclipse C 项目添加库?

    I need to add a C library to C project in Eclipse indigo What I ve done so far I ve downloaded and installed the library
  • MVC3 中的 URL 重写

    我正在为当地一所大学使用 MVC3 开发一个项目 我遇到了一个要求 我被困住了 找不到任何出路 假设我的 URL 是 www abc com要求是 如果我们在 URL 后输入教师姓名 我们将获得该教师的详细视图 例如 www abc com
  • Tomcat Servlet 类NotFoundException

    我创建了简单的 servlet package servlets import javax servlet ServletException import javax servlet http HttpServlet import java
  • 在 Java Swing 应用程序中创建在线帮助 - 使用 pdf 用户文档

    我正在尝试将一些用户文档链接到我的 Java Swing 应用程序 用户文档是 pdf 格式 我希望能够单击应用程序中的按钮 打开某种 pdf 渲染器来显示我的 userdoc pdf 我不想使用运行时执行命令 我尝试了以下方法 但没有取得
  • 如何在 JSP 中将值插入到 derby 数据库中?

    我在 JSP 中创建了一个表单来将数据插入到 derby 中的数据库中 但它不起作用 数据库名称是 CUSTOMER 表格 ID int CNAME varchar ADDRESS varchar PHONENUMBER varchar c
  • 无法监视 HttpSession / Mockito

    我想要部分嘲笑Httpsession但为此我需要监视它而不是嘲笑它 并且如果没有已经被嘲笑的请求对象 我就无法获得它的接口 请帮忙 换句话说 我怎样才能得到一个对象HttpSession没有HttpServletRequest object
  • 将 Google 图表另存为 pdf

    我正在尝试将饼图另存为 pdf 文件 如下所示http keepcoding ehsanabbasi com php convert google chart to png and pdf 在 php chartsrc 中包含 javasc
  • 无法在 SD 卡上写入文件

    我试图在 SD 卡上写入照片 但没有成功 我已经获得了在可移动存储中写入的权限 并且 SD 卡已安装 另外 我检查了 SD 卡的路径是否存在 并且得到了肯定的结果 失败的地方是当我使用mkdir 功能 它返回 false 并且没有创建文件