【问题标题】:How to save files at the root of SD card (android 8.0+)?如何将文件保存在 SD 卡的根目录(android 8.0+)?
【发布时间】:2019-06-07 13:05:33
【问题描述】:

我正在尝试在外部 SD 卡的根目录下创建一个文件夹(然后将我的应用生成的文件放入其中)。

我正在请求 WRITE_EXTERNAL_STORAGE 权限,但我认为在外部 SD 卡上实际写入是不够的。

这是我的代码:

private boolean authorized = false;
private final static int MY_PERMISSIONS_REQUEST_EXTERNAL_STORAGE = 1;
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        long debut = System.currentTimeMillis();
        if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            debut = System.currentTimeMillis();
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_EXTERNAL_STORAGE);
        } else {
            authorized = true;
        }
        while (!authorized) {
            if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
                authorized = true;
            } else if (System.currentTimeMillis() - debut >= 5000) {
                this.finish();
                System.exit(0);
            }
        }

//SDCARD path = "/storage/9016-4EF8"
new File("/storage/9016-4EF8"+"/MyApp").mkdirs();
}

我的代码适用于我的手机 (android 5.1),但不适用于我的平板电脑 (android 8.1)。看来我只有对最新版本的 android 的读取权限。 如何获得 SD 卡的写入权限?

我正在使用文件资源管理器应用程序 Xplore,并且该应用程序似乎需要其他权限才能修改 SD 卡上的文件:

“授予 Xplore 访问您在 sd 卡上的数据(包括照片和视频)的权限”

我怎样才能获得这个许可(如果可能的话)?

【问题讨论】:

  • "如何获得 SD 卡的写入权限?" -- 你不知道,特别是在 Android Q 及更高版本上。使用存储访问框架(例如,ACTION_OPEN_DOCUMENT_TREE)并让用户选择内容的去向。
  • 问题是我不希望用户能够选择,我需要我的文件在一个固定的位置,很容易在 SD 卡上找到
  • 不,我的朋友,这是一种不好的做法,Google 不再允许这样做。用户必须选择文件夹。您可以做的是要求用户(使用对话框或其他方式)选择 SD 的根文件夹,从而使您可以访问该文件夹的任何子文件夹,这当然意味着整个 SD 卡。
  • 好吧,我被要求以这种方式保存所有文件。如果我将返回的 URI 保存在某个地方,我会保留写的权利吗?
  • “我被要求以这种方式保存所有文件”——与提出要求的人交谈,并解释这不是 Android 上的工作方式。 “我需要我的文件在一个固定的位置,在 SD 卡上很容易找到”——欢迎您使用getExternalFilesDirs()。如果返回 2 个以上的位置,则除第一个位置外,所有位置都将位于可移动媒体上。但是,它不会是可移动媒体的根。 “如果我将返回的 URI 保存在某个地方,我会保留写入的权利吗?” -- 您可以在ContentResolver 上使用takePersistableUriPermissions() 来获得从存储访问框架获得的Uri

标签: android android-storage


【解决方案1】:

你是对的!如果您想访问 SD 卡,这还不够。您需要使用documentFile

请参阅我对有关 SD 卡的较早问题的回答,以了解如何访问您的 SD 卡 here

【讨论】:

  • 没有提供内容,没有例子。如果这个问题是开放的,你应该举个例子来回答。否则,这是您发布的问题的副本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
相关资源
最近更新 更多