标签: android-external-storage

在外部存储中创建新文件的权限被拒绝

如果该文件不存在,我想在外部存储中创建一个新文件。我已经在 SO 中阅读了类似的问题,并WRITE_EXTERNAL_STORAGE在我的清单中获得了许可。在使用 android 5.1 和 xperia t 使用 android 4.3 的 GenyMotion 模拟器上测试结果是一样的,我得到“打开失败:EACCES(权限被拒绝)file.createNewFile()。我检查了运行时,getExternalStorageStatefunctoin 返回值是 "MOUNTED "

注意:如果我手动创建文件,我的代码可以完美运行并读取内容,这意味着可以访问外部存储。我虽然在我的代码中的另一个地方写入外部存储getExternalPublicStorage用于保存捕获的图像,但它工作正常!

File f = Environment.getExternalStorageDirectory();
File config = new File(f, "poinila config" + ".txt");
if (!config.exists()) {
    if (!config.createNewFile()) {
        // toast that creating directory failed
    } else {
        writeDefaultIpPort();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑: 路径字符串是“/storage/sdcard0/poinila config.txt”

android android-external-storage

5
推荐指数
1
解决办法
5769
查看次数

从SD卡或Android中的任何应用程序中选择docx,doc,rtf,pdf类型的文件

目前我正在尝试从SD卡或任何应用程序中选择特定类型的文件,但我失败了,我的代码如下,

Intent intent;
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT)
            intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
        else
            intent = new Intent(Intent.ACTION_GET_CONTENT);

        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.setType("application/pdf|application/msword|application/vnd.openxmlformats-officedocument.wordprocessingml.document" +
                "|application/vnd.openxmlformats-officedocument.wordprocessingml.template" +
                "|application/vnd.ms-word.document.macroEnabled.12" +
                "|application/vnd.ms-word.template.macroEnabled.12" +
                "!application/vnd.ms-word.template.macroEnabled.12|application/rtf");

        startActivityForResult(intent, Constants.ImagePicker.REQ_PICK_RESUME);
Run Code Online (Sandbox Code Playgroud)

但它只选择每种类型的文件.

android document android-intent android-gallery android-external-storage

5
推荐指数
1
解决办法
674
查看次数

如何从 Android 5 的外部存储中删除文件

我用了

File f=new File(MyPath);
f.delete();
Run Code Online (Sandbox Code Playgroud)

我使用了权限WRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGE,但它在 Android 5 中不起作用。

Logcat 消息:

java.io.FileNotFoundException: storage/external_SD/mm.txt: open failed: EACCES (Permission denied)  
Run Code Online (Sandbox Code Playgroud)

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mahestan_programming.myapplication">

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

自版本 4.4 起,我们无法从 MICRO SD 卡删除和写入文件。现在它是只读的。

android delete-file android-permissions android-external-storage

5
推荐指数
1
解决办法
5478
查看次数

ACTION_GET_CONTENT 意图不显示外部存储

我正在为我的 Android 应用实现导入功能。我想让用户选择他们想要从他们设备上的外部存储(确切地说是下载目录)和其他在线文件存储(如 DropBox 和 Google Drive)导入的文件。

我实现了它并在一个模拟器和两个安卓设备上进行了测试。当我在模拟器上测试它时,Android 版本 6.0,因为它没有安装 DropBox 和 GoogleDrive,我看到了我所期待的,它能够从下载目录中选择一个文件: 在此处输入图片说明

当我在 Google Pixel 手机 Android 版本 7.1.2 上对其进行测试时,一切都按我的预期工作。我可以从下载目录、Google Drive 和 DropBox 中选择一个文件: 在此处输入图片说明

但是,当我在三星 Galaxy 4 设备 Android 版本 5.0.1 上对其进行测试时,我可以从 Google Drive 和 Dropbox 中选择一个文件,但是我无法从我的下载目录中选择一个文件: 在此处输入图片说明

这是我选择文件的代码:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/*");
startActivityForResult(intent, GET_FILE_RESULT_CODE);
Run Code Online (Sandbox Code Playgroud)

请让我知道我可以做些什么来解决这个问题。谢谢!

android android-intent android-file android-external-storage android-storage

5
推荐指数
1
解决办法
2908
查看次数

SD卡传输(存储空间不足)

我试图让我的应用程序能够移动到 SD 卡。到目前为止,我已将属性 android:installLocation="auto" 添加到我的清单文件中。

当我尝试将手机上的应用程序 (75MB) 的存储选项从内部移动到外部时,该选项可以移动它,但它在完成 90% 后一直显示“没有足够的存储空间”,即使我的内部 (64 GB) 和外部 (128 GB) 有足够的空间。我还尝试在我的手机上移动一个大于 (75MB) 的不同应用程序,并且传输成功。我还尝试创建一个虚拟模拟器来尝试传输我的应用程序,但它正在做同样的事情。

清单文件中是否有我缺少的属性导致此问题发生?有什么建议?

android android-manifest android-sdcard android-external-storage

5
推荐指数
1
解决办法
320
查看次数

getExternalStorageDirectory() 和 getDataDirectory() 之间的区别

我正在尝试获取 Android 设备的内部和外部存储路径。

这就是我在大多数设备中获取内部存储路径的方式

Environment.getExternalStorageDirectory().getPath()
Run Code Online (Sandbox Code Playgroud)

上述方法适用于大多数设备,但某些设备此方法会出现问题,即它返回 SD 卡路径。

有人可以告诉我如何准确获取那些Environment.getExternalStorageDirectory().getPath()返回外部存储路径(SD 卡路径)的设备中的内部存储路径。

我也知道,Environment.getDataDirectory().getPath()但此方法返回值类似于/data同一 Environment.getExternalStorageDirectory().getPath()设备返回/storage/sdcard0的值,当 SD 卡不存在时,该值指向内部存储,但当 SD 卡存在时,它会给出指向 SD 卡而不是内部存储的路径。

谁能帮助我理解上述两者之间的区别,并帮助我获取Android设备的内部存储路径?另外,请帮助我找到一个适用于所有设备的解决方案。

编辑:任何认为这篇文章不合适的人请发表评论并让我知道原因,以便我将来牢记这一点。

java storage android android-sdcard android-external-storage

5
推荐指数
1
解决办法
6669
查看次数

获取 SD 卡的路径

请在拒绝投票和/或将其标记为重复之前阅读整篇文章!

我正在开发一个应用程序,它从用户手机上的特定文件夹中读取文件 - 从 SD 卡(如果有的话)或从内置存储。是的,清单中提到了“READ_EXTERNAL_STORAGE”,我也在处理 API>23 的权限弹出窗口。

我曾经简单地使用

File folder = new File(Environment.getExternalStorageDirectory(), "myfolder");
Run Code Online (Sandbox Code Playgroud)

获取存储在内置存储(S7 为 32gb)中的文件夹的路径,但现在我想获取 SD 卡的路径。根据谷歌给我的几乎每一个结果,“Environment.getExternalStorageDirectory()”应该给你SD卡的路径,但对我来说它没有(而且从来没有)。

我已经用两个不同的三星 Galaxy S7 测试了以下内容,两者都使用 Android 7.0,一个带有 SD 卡(+ 文件夹),另一个没有(+ 文件夹):

Log.d(tag, System.getenv("EXTERNAL_STORAGE"));
Log.d(tag, System.getenv("SECONDARY_STORAGE"));
Log.d(tag, ""+new File(System.getenv("EXTERNAL_STORAGE")+File.separator+"myfolder").isDirectory());
Log.e(tag, ""+new File(System.getenv("EXTERNAL_STORAGE")+File.separator+ordner).getAbsolutePath());
Log.d(tag, Environment.isExternalStorageRemovable());
Log.d(tag, Environment.getExternalStorageDirectory());
Log.d(tag, Environment.getExternalStorageDirectory().getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,两部手机都输出相同的信息:

/sdcard
null
true
/sdcard/myfolder
false
/storage/emulated/0
/storage/emulated/0
Run Code Online (Sandbox Code Playgroud)

根据文件管理器应用程序(“我的文件”),内置存储称为“内部存储”,这更没有意义(我知道Android中内部存储和外部存储之间的区别)。

如何获取实际 SD 卡的路径(无需对其进行硬编码)?

android sd-card android-sdcard android-external-storage android-7.0-nougat

5
推荐指数
1
解决办法
6693
查看次数

Android 10:将外部存储中的文件保存到名为“ / sdcard / my-app /”的目录中有哪些选择?

在Android Pie之前,我始终存储应用程序需要存储在上的文件,这些文件/sdcard/my-app/是通过

File fBaseDir = new File(Environment.getExternalStorageDirectory(), "my-app");

我的一个应用程序在其中存储了数百个(最多数千个)收藏夹图标/sdcard/my-app/favicons,当用户创建该应用程序的备份时,它将存储在中/sdcard/my-app/backups。与我的应用共享时,Chrome浏览器拍摄的网页屏幕快照存储在中/sdcard/my-app/screenshots,依此类推。

当我卸载该应用程序时,我可以稍后重新安装它,并且仍然具有所有图标,屏幕快照和备份可用于恢复状态,而不必重新下载所有图标(并且可能丢失了所有其他数据)。

我还可以/sdcard/my-app/通过将目录复制到PC上轻松创建该目录的备份,并在另一部手机上将其还原,例如,当我迁移到新设备时。

我还可以使用文件浏览器查看该目录中的文件,然后选择并通过电子邮件发送或将其复制到Google云端硬盘,或专门删除其中的一些文件(例如旧的备份文件)。

在Android 10中,这种方法已经崩溃。我无法将图标添加到Images Media-Folder,因为它们不是真实图像,它们会不必要地使视图混乱,并可能禁止我的开发者帐户进入Play商店。我也不想将所有这些数据存储在App-Private目录中,因为在卸载该应用程序时,这些数据将被删除,并且因为其他应用程序(例如资源管理器)无法访问它们。

我有什么选择?手动选择文件或目录不是一种选择,除非目录只需要选择一次,然后永久授予访问权限(以读取和写入文件)。

我从不在外面读书或写东西/sdcard/my-app/

android file-access android-external-storage android-10.0

5
推荐指数
1
解决办法
846
查看次数

Flutter 通过 path_provider 包获取外部存储目录和 MediaStore

我需要打开并保存设备上可能存在的简单文本文件。例如在文档、下载等中。只要文件可用于其他程序,在 Android 术语中,它就是“外部存储”

\n

path_provider提供了几种方法。其中之一getExternalStorageDirectory()。安卓文档说:

\n
\n

此方法已在 API 级别 29 中弃用。为了提高用户隐私,\n不推荐直接访问共享/外部存储设备。当\n应用程序定位 Build.VERSION_CODES.Q链接时

\n
\n

如果我使用方法path_provider

\n

getExternalStorageDirectory()\xe2\x86\x92 /storage/emulated/0/Android/data/myapp.name/files \n getApplicationDocumentsDirectory()\xe2\x86\x92 /data/user/0/myapp.name/app_flutter

\n

getExternalStorageDirectories(type: StorageDirectory.documents)返回列表,其中包含

\n

/storage/emulated/0/Android/data/myapp.name/files/Documents

\n

/storage/1CEE-4019/Android/data/myapp.name/files/Documents

\n

在我的 Android 模拟器(Api 30)上,真实的外部文档位于

\n

/存储/模拟/0/文档

\n

/存储/模拟/0/下载

\n

我怎样才能访问它们?据我了解,没有其他选择path_provider

\n

android-external-storage flutter

5
推荐指数
1
解决办法
7993
查看次数

如何使用 Flutter (Dart) 在 android 13 (API 33) 上保存文件

文件不仅仅是媒体文件。它也可能是.pdf、.zip、.xls 等。

API 33 上的外部存储权限被永久拒绝。
因此,我们无法像这样的方法进行保存 ->

String path = 'This is external storage path';
File(path).writeAsBytes(bytes) 
Run Code Online (Sandbox Code Playgroud)

我的应用程序在 android 11、10、9 等上运行良好。我已经在 AndroidManifest.xml 上设置了存储权限,但它在 android 13 上不起作用。
那么,如何在 android 13 上的外部存储中保存文件?
我知道一种在 AndroidManifest.xml 上设置MANAGE_EXTERNAL_STORAGE 的方法。但它受到 PlayStore 的限制。所以,这对我们来说不太好。

那么,在 Android 13 的外部存储上保存文件的最佳方式是什么?

我看过这个讨论

storage dart android-permissions android-external-storage flutter

5
推荐指数
1
解决办法
5668
查看次数