首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何管理所有版本的本地存储(主存储、二级存储、sd卡、usb)

如何管理所有版本的本地存储(主存储、二级存储、sd卡、usb)
EN

Stack Overflow用户
提问于 2016-02-05 18:27:27
回答 1查看 738关注 0票数 2

Intro

管理主存储文件+辅助存储文件(仅限于本地存储文件):我将列出我已经拥有的所有信息,并希望您扩展它们或纠正我,以便希望这个问题成为一个概述,概述在开始处理本地存储之前某人必须知道的所有主要信息。我相信很多人都在寻找这样的概览..。

概述

通常,您有以下储藏室:

  • 主存储器(通常可以直接访问,主要是在内部存储器上,但这取决于电话制造商)
  • 辅助存储器(可直接为android <=4.3访问)
  • 其他外部存储,例如USB .

提出以下问题:

  1. 如何找出所有可用的本地存储+找出类型(主要,次要研究。内部,sd卡,usb)?
  2. 列出存储区上的所有可用文件 2.1哪些存储库将通过MediaStore索引? 2.2如何通过MediaStore获取所有文件? 2.3如何在没有MediaStore的情况下获取所有文件
  3. 如何编辑这些存储库上的文件?

大多数我已经知道的事情,主要是我的问题是基于媒体商店索引的数据,如何找出哪些存储是可用的,如何识别存储.因此,我发布了一个答案,回答了大部分的部分,并显示了每个问题的状态<=> android版本对,这样就可以很容易地看到哪些信息仍然缺失

状态-如果您知道的更多或者我错了,可以扩展/更正我对这些问题的答案。

Android < 4.4

  • 问题1-部分已知的✖
  • 问题2.1 -未知的✖
  • 问题2.2 -已知的✔
  • 问题2.3 -已知的✔
  • 问题3-已知的✔

Android 4.4

  • 问题1-部分已知的✖
  • 问题2.1 -未知的✖
  • 问题2.2 -已知的✔
  • 问题2.3 -部分已知的✖
  • 问题3-部分已知的✖

Android >=5

  • 问题1-部分已知的✖
  • 问题2.1 -未知的✖
  • 问题2.2 -已知的✔
  • 问题2.3 -已知的✔
  • 问题3-已知的✔
EN

回答 1

Stack Overflow用户

发布于 2016-02-05 18:37:55

----------------------------------------------

Android <4.4:

----------------------------------------------

1.如何找出所有可用的本地存储库,并找出其类型(初级、二级存储)。内部,sd卡,usb)?(部分已知✖)

我不知道如何正确区分可用的存储器.通过File primaryStorage = context.getExternalCacheDir()获取主存储路径是可能的。或者您可以通过File[] dirs = ContextCompat.getExternalFilesDirs(context, null);获取所有路径。这将列出所有可用的路径,不确定它是否会返回usb存储,或者它是否可靠地添加sd卡路径.

实际上,我不知道如何可靠地确定哪条路径是内部的,其中一条是sd卡,哪条是usb驱动器

2.1哪些存储将通过MediaStore__?(未知✖)索引

我已经看到,有时外部存储被索引,有时没有,我不确定默认行为是什么.

2.2如何通过MediaStore__?(已知✔)获取所有文件

只需通过ContentProvider上的查询列出所有文件,其中包含以下URIMediaStore.<Audio,Video,Images,File>.Media.EXTERNAL_CONTENT_URI,取决于您想要的数据

2.3如何在没有MediaStore__的情况下获取所有文件?(已知✔)

在这个android版本中,您只需要android.permission.WRITE_EXTERNAL_STORAGE,然后可以通过File类直接列出外部存储中的所有文件。您只需要知道第1点的可用根路径。

3.如何编辑这些存储上的文件?(已知✔)

如果您在清单中具有上述权限,则可以通过File类直接完成操作。

----------------------------------------------

Android4.4:

----------------------------------------------

这个设备非常具体,因为它还没有提供Storage Access Framework,但已经限制了对二级存储的访问!

1.如何找出所有可用的本地存储库,并找出其类型(初级、二级存储)。内部,sd卡,usb)?(部分已知✖)

基本上,这应该和android <4.4的方式一样.

2.1哪些存储将通过MediaStore__?(未知✖)索引

在这个设备上,只有主存储器会被索引,对吗?

2.2如何通过MediaStore__?(已知✔)获取所有文件

它的工作方式与android <4.4的工作方式相同.

2.3如何在没有MediaStore__的情况下获取所有文件?(部分已知的✖)

在主存储器上,它的工作方式与在android <4.4上的工作方式相同。我不知道其他地方仓库的android版本是如何工作的.

3.如何编辑这些存储上的文件?(部分已知的✖)

主存储文件将通过File类进行编辑。我不知道怎样才能可靠地进入其他仓库.

----------------------------------------------

Android >=5:

----------------------------------------------

1.如何找出所有可用的本地存储库,并找出其类型(初级、二级存储)。内部,sd卡,usb)?(部分已知✖)

与以前一样,获得主存储器是可能的。不过,我不知道怎么弄到其他仓库的清单。手动方式是让用户选择辅助存储器、sd卡、usb卡的根目录如下:

代码语言:javascript
复制
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
context.startActivityForResult(intent, 1234);

然后,只需记住返回的Uri,并在从Storage Access Framework获得结果时持久化Uri

代码语言:javascript
复制
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (requestCode == 1234)
    {
        if (resultCode == Activity.RESULT_OK)
        {
            // get uri
            Uri treeUri = data.getData();

            // persist permissions
            final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            getContentResolver().takePersistableUriPermission(treeUri, takeFlags);

            // remember the uri for having access to the storage
            // ...
        }
        return true;
    }
    return false;
}

我不知道如何找出用户选择的目录的类型(sd卡,usb)。

根路径下的所有文件将通过DocumentFile类可读和可写。

2.1哪些存储将通过MediaStore__?(未知✖)索引

只有我想的初选。对,是这样?

2.2如何通过MediaStore__?(已知✔)获取所有文件

和以前一样..。

2.3如何在没有MediaStore__的情况下获取所有文件?(已知✔)

对于主存储,它也和以前一样工作(仅通过File类),对于其余的存储,您必须使用Uri作为第1点中相应的存储。

3.如何编辑这些存储上的文件?(已知✔)

主存储文件将通过File类编辑,其余的将通过DocumentFile编辑(在第1点树Uri的帮助下)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35231022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档