强制访问外部可移动 microSD 卡

2024-06-10

我使用的是三星 A3,Android 5.0.2。我在用着这个设置 https://stackoverflow.com/a/47251607/1422096编译应用程序,即 Android 4.1 Jelly Bean (API 16) 目标。

我精确地知道外部可移动microSD卡的路径,它是/mnt/extSdCard/(另请参见下面的注释#7)。

问题:我注意到

File myDir = new File("/mnt/extSdCard/test");
myDir.mkdirs();

不起作用:没有创建目录。

Also:

File file = new File("/mnt/extSdCard/books/test.txt");   // the folder "books" already exists on the external microSD card, has been created from computer with USB connection
FileOutputStream fos = new FileOutputStream(file);

产生这个错误:

java.io.FileNotFoundException:/mnt/extSdCard/books/test.txt:打开失败:EACCES(权限被拒绝)位于libcore.io.IoBridge.open(...

如何强制对外部可移动 microSD 卡进行读+写访问?

Notes:

  1. Environment.getExternalStorageDirectory().toString() gives /storage/emulated/0这是我的手机内部存储,即不是我想要的。

  2. getExternalFilesDir(null) gives /storage/emulated/0/Android/data/com.blahblah.appname/files/即不是我想要的。请注意,我不能使用getExternalFilesDirs与最后的s因为 API16 中不提供此功能。此外,运行时权限在 API16 中也不可用。

  3. 我已经有了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />,并且READ_EXTERNAL_STORAGE.

  4. 我读了很多主题,比如this one https://stackoverflow.com/a/38247830/1422096 or this one https://stackoverflow.com/questions/26744842/how-to-use-the-new-sd-card-access-api-presented-for-android-5-0-lollipop/26765884#26765884,其实大概有二十个类似的问题,但最后看起来很复杂,一切都和它相反的说。这就是我正在寻找针对这种情况的解决方案。

  5. 我不想要ACTION_OPEN_DOCUMENT and ACTION_CREATE_DOCUMENT,事实上我不需要任何 GUI 解决方案。

  6. 我有的一些应用程序(Sync Resilio)允许修改/mnt/extSdCard/music/成功,在那里创建新文件等等。

  7. 顺便一提,ls -la /mnt/extSdCard/ gives

    drwxrwx--x root     sdcard_r          2017-10-15 01:21 Android
    drwxrwx--- root     sdcard_r          2017-10-14 00:59 LOST.DIR
    drwxrwx--- root     sdcard_r          2017-12-05 16:44 books
    drwxrwx--- root     sdcard_r          2017-11-21 22:55 music
    

请记住,某些 Android 设备的 SD 卡路径不同,有些设备没有可移动 SD 卡。

您不必直接设置路径!

File myDir = new File("/mnt/extSdCard/test");
myDir.mkdirs();

您可以先检查您的设备是否安装了可移动SD卡:

public static boolean isSDCardAvailable(Context context) {
    File[] storages = ContextCompat.getExternalFilesDirs(context, null);
    if (storages.length > 1 && storages[0] != null && storages[1] != null)
        return true;
    else
        return false;
}

为什么外部目录 > 1,因为大多数 Android 设备都将外部存储作为主目录,将可移动 SD 卡作为第二目录:

但您可以使用一种方法来获取可移动 microSD 卡的真实路径:

public static String getRemovableSDCardPath(Context context) {
    File[] storages = ContextCompat.getExternalFilesDirs(context, null);
    if (storages.length > 1 && storages[0] != null && storages[1] != null)
        return storages[1].toString();
    else
        return "";
}

然后就这样做:

File myDir = new File(getRemovableSDCardPath(getApplicationContext()),"test");
if(myDir.mkdirs()){
  Log.i(TAG, "Directory was succesfully create!");
}else{
  Log.i(TAG, "Error creating directory!");
}

例如使用该方法:

   String pathSDCard = getRemovableSDCardPath(getApplicationContext());

因此,我得到了可移动 SD 卡的路径(如果我没有可移动 SD 卡,我的路径将为“”,因此您可以实施验证以避免创建文件夹):

/storage/extSdCard/Android/data/com.jorgesys.myapplication/files

现在在里面创建一个新文件夹:

    File myDir = new File(getRemovableSDCardPath(getApplicationContext()),"test");
    if(myDir.mkdirs()){
        Log.i(TAG, "Directory was succesfully create!");
    }else{
        Log.i(TAG, "Error creating directory!");
    }

现在我有了目录/test创建:

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

强制访问外部可移动 microSD 卡 的相关文章

  • 如何使用我的 Apple 开发者 ID 签署 .jar 文件

    我有一个java可执行文件jar我需要使用我的 Apple 开发者 ID 进行签名的文件 我不打算通过应用程序商店分发它 我将通过我的网站直接向客户分发该应用程序 我不打算绕过 Gatekeeper Signing the app和我的de
  • Java 中的工作线程

    我需要通过线程每分钟从表中读取数据 然后执行某些操作 任务完成后 我是否应该启动一个线程并将其置于睡眠模式 1 分钟 然后再次检查表是否有数据 再次执行任务并休眠 1 分钟 这是正确的方法吗 任何人都可以为我提供一些 Java 示例代码来执
  • 从 ArrayList HashMap 中获取多个随机值

    我想从 ArrayList 中获取一些特定数字的随机值 final ArrayList
  • Spring:如何将 KeyHolder 与 PostgreSQL 一起使用

    最近迁移到 POSTGRESQL 我试图获取在数据库表中创建新条目时唯一生成的密钥 桌子screenstable看起来像这样 CREATE TABLE screenstable id serial NOT NULL screenshot b
  • 在android上获取电池温度

    android 如何获取电池的温度 http developer android com reference android os BatteryManager html http developer android com referen
  • 创建 FileInputStream 对象时使用 InputStream 而不是 FileInputStream 有什么区别

    这可能很愚蠢 但我想知道后台操作的区别 InputStream is new FileInputStream filepath FileInputStream is new FileInputStream filepath 上面两行代码有什
  • Android 应用程序中最用户友好的布局选项

    所以我面临的问题不是主观判断什么对用户最好 我认为 而是有哪些选项可以用来说明定位 Think of some sort of team sports app where you can put little dots for player
  • 如果没有 @Provides 注释的方法,则无法提供 Dagger AndroidInjector

    我已经通过 MVP 模式完成了我的 Android 项目 MainActivity 因此 在我的 MainPresenter 中 我想注入一个动态字符串 然后该字符串将填充 TextView 例如 class MyMainPresenter
  • Android 堆栈跟踪显示生产 Firebase crashlytics 中的测试代码

    该应用程序的 Play 商店版本的 Firebase crashlytics 中报告了该异常 当用户进入启动活动时会发生这种情况 任何帮助 将不胜感激 谢谢 没有其他可用的堆栈跟踪有助于跟踪代码发生的位置 Fatal Exception j
  • 带句点和逗号的自定义格式数字

    有点相关这个问题 https stackoverflow com questions 4738853 java decimal format parse to return double value with specified numbe
  • 使用 jsch 将远程服务器中的目录移动到同一远程服务器中的另一个位置

    我正在使用 JSCH API 通过 sftp 连接到远程服务器 我需要将远程服务器中的目录从位置 A 移动到位置 B 看起来像方法channelsftp put src dest 只允许移动文件而不移动目录 有人可以解释一下我该怎么做吗 您
  • Spring MVC @RequestBody 不适用于 jquery ajax?

    这是我的ajax请求 var dataModel name1 value1 name2 value2 ajax url testURL type POST async false contentType application json d
  • 纹理映射和光照顶点着色器错误 Java OpenGL

    我正在尝试将纹理映射到 3D 立方体并尝试编写着色器以使其具有照明和纹理 我尝试过只编写纹理着色器并且它有效 我还尝试过仅将 3D 值设置为红色的照明着色器 并且该照明着色器也可以工作 但当我尝试将两者结合起来时 我遇到了问题 我在下面提供
  • 从 java 反射中隐藏我的安全密钥

    下面的类是我用于加密的安全密钥提供程序 public class MySecretKey private String key 2sfdsdf7787fgrtdfg cj5 Some Util methods goes on Here 首先
  • 找出网络上所有活动机器的IP

    如何找到 LAN 上所有当前活动计算机的 IP 如何编写一个可以在任何子网上运行的通用程序 我目前正在这样做 尝试 isReachable 是否到达我子网上的所有机器 如果他们这样做 请存储他们的 IP 地址 无论如何 是否有其他方法可以手
  • 从 blob 反序列化 java 对象

    首先 我很抱歉 我要问一些愚蠢的问题 我根本不懂java 也不知道我们是否可以问这样的问题 如果没有 删除我的主题 oracle中有一个存储blob的表 它是二进制的 我能够解码它 输出看起来像这样 sr com epam insure c
  • 大十进制减法

    我想减去2double值 我尝试了以下代码 double val1 2 0 double val2 1 10 System out println val1 val2 我得到的输出为 0 8999999999999999 为了获得输出0 9
  • 将 JVM 参数放入要在运行时获取的文件中

    我正在构建当前应用程序的 jar 它需要设置几个 JVM 参数 有没有办法在文件中而不是在命令行上设置这些 JVM 参数 我已经做了一些搜索 看起来我可以使用 java properties 文件做一些事情 可能通过设置 java args
  • JProgressBar 不在循环内更新

    我目前正在自学Java 我一直在尝试不同的事情 比如JRadioButtons JcomboBoxes 等 现在 我正在尝试使用JProgressBar但它似乎无法正常工作 相关代码段 JProgressBar progress JButt
  • 使用迭代器时无限循环

    Set key1 map keySet Iterator it1 key1 iterator int cnt 0 while it1 hasNext cnt 这段代码导致无限循环的可能性有多大 实际上这会导致无限循环 我怀疑是因为我没有服用

随机推荐

  • ViewPager 显示 Fragment 时出现问题

    我正在尝试使用 ViewPager 获取包含三个选项卡的片段 最初 我使用 FragmentMgr 从 Activity 实例化片段 效果很好 当我使用 ViewPager 转换此导航时 此 Fragment 不再显示 MainActivi
  • 如何以编程方式将文件上传到网站?

    我必须将文件上传到服务器 该服务器仅公开带有文件上传按钮的 jsf 网页 通过 http 我必须自动化一个进程 作为java独立进程完成 该进程生成一个文件并将文件上传到服务器 遗憾的是 必须上传文件的服务器不提供FTP或SFTP 有没有办
  • 如何检测已更改的网页?

    在我的应用程序中 我使用 LWP 定期获取网页 无论如何 是否要检查两次连续提取之间网页是否在某些方面发生了变化 除了明确进行比较之外 是否有在较低协议层生成的任何签名 例如 CRC 可以提取并与旧签名进行比较以查看可能的更改 有两种可能的
  • Java中的重载方法[重复]

    这个问题在这里已经有答案了 必须满足哪些条件才能使两个方法正确地成为重载方法 两个方法是否至少必须在参数列表上有所不同 例如 public void A public void A int val 因此 仅更改返回类型和 或访问修饰符不会产
  • 如何在 GWT 中实现登录屏幕?

    我正在为后端应用程序编写一个小型 GWT 前端 我想知道 GWT 应用程序的最佳安全模型是什么 我正在考虑实现一种 RPC 方法 该方法从客户端网页接收用户密码的 MD5 然后将会话 ID 传回客户端页面 或失败代码 所有后续调用都将简单地
  • 参数验证最佳实践

    想象一下你有一个应用程序是某种前端您所有的业务逻辑 该前端有很多依赖的 DLL 并且这些 DLL 中的方法可能会在前端执行一次给定方法时重复相互调用 如果您的应用程序的用户不直接访问这些 DLL 您是否应该 1 冒着 小 性能下降的风险并验
  • 举例说明为什么不建议将图像存储在 CoreData 中?

    这个问题已经被问过很多次了 我读到很多用户都说不建议将图像存储在数据库中 特别是在 CoreData 中 他们似乎都忽略了他们这样做的原因 甚至苹果文档也声明了这一点 每个人都指向那个方向 每次讨论都以这样的方式结束 好吧 你可以 但存储路
  • 使用 kwargs 时如何转义 Python format() 中的冒号?

    我有一本想要打印的字典 其键中带有冒号 不幸的是 冒号字符用于格式化 所以我需要以某种方式转义它 例如 gt gt gt d hello world with colon moo gt gt gt hello format d world
  • 如何改变CSS切换开关的大小

    我正在为一个名为 elementor 的插件设计一个元素 这个项目实际上只是为了帮助我学习 WordPress 开发的功能 我正在制作一个 切换内容 滑块 可以在文本或预定义的 html 之间切换 我根据本指南使用了滑块 https www
  • 当手机进入待机状态(屏幕关闭状态)时,活动识别停止接收更新

    我在活动识别方面遇到一些问题 我已经在应用程序中实现了它 当设备屏幕打开时它工作正常 我的活动识别意图服务类中有一个日志条目 我可以看到它何时获得更新 所以 我知道当屏幕打开时它工作正常 但是 当手机进入待机状态 屏幕关闭 后 它会停止检测
  • Vim ":source %" 命令导致错误 (E499)

    Stack Overflow vim 用户大家好 我最近发现自己花了相当多的时间在学校的计算机科学实验室编写代码 我在无数的linux系统上配置过vim 从来没有遇到过这个错误 E499 Empty file name for or onl
  • 离子标签栏与主页按钮重叠(iPhone X - iOS 11)

    使用 iOS 11 和 iPhone X苹果指定 https developer apple com ios human interface guidelines overview iphone x 每个应用程序都应该位于 安全区域 由于虚
  • 内容处置:ASP.Net 中的内联 PDF 文件不起作用

    我正在尝试将带有标题的 PDF 文件返回到浏览器Content Dispostion inline就在我创建这个文件之后 浏览器的查看者无法打开它 文件没有损坏 如果我放入浏览器 查看器会正确显示文件 但我想一次性创建文件并检查用户对文件的
  • 支持链接方法的模拟对象

    我想知道是否有一种相当简洁的方法来模拟支持方法链接的对象 例如 数据库查询对象可能有一个如下所示的方法调用 result database gt select my table gt where array my field gt a va
  • 当通过 JS 事件加载新页面时,如何使 Selenium WebDriver 等待页面加载

    我正在致力于自动化一个网站 该网站有许多链接 可以通过 JS 事件加载新页面 基本上 有些元素是可点击的 点击其中一个会导致一些 JavaScript 运行 这会导致表单被提交并路由到新页面 现在 如果这些只是标准的 HTML 链接 那就没
  • ImportError:IDLE 中没有名为 matplotlib 的模块

    当我想在 IDLE 中导入 matplotlib 时 出现以下错误 ImportError No module named matplotlib 我使用mac 我的bash profile中python的PATH是 Setting PATH
  • 如何在 Haskell 中枚举递归数据类型?

    这篇博文 http lukepalmer wordpress com 2008 05 02 enumerating a context free language 对于如何使用 Omega monad 对角枚举任意语法有一个有趣的解释 他提
  • 映射并使用 (X, Y)、(X,Z) 和 (Y,Z) 对以及关联的 X、Y 或 Z 坐标

    我有一个清单清单nLedgers 3D 点云 nodeID X Y Z 具有多行 有些节点会有相同的X and Y坐标和不同Z协调 我想首先确定不同的Z具有相同坐标的X and Y坐标 那么同样对于X 最后为Y 然后 使用那些 X Y X
  • 设置 display:block 后将焦点设置在输入元素上

    我有一个 HTML 内容如下 div class hiddenClass this implies display none span span div
  • 强制访问外部可移动 microSD 卡

    我使用的是三星 A3 Android 5 0 2 我在用着这个设置 https stackoverflow com a 47251607 1422096编译应用程序 即 Android 4 1 Jelly Bean API 16 目标 我精