Intro
管理主存储文件+辅助存储文件(仅限于本地存储文件):我将列出我已经拥有的所有信息,并希望您扩展它们或纠正我,以便希望这个问题成为一个概述,概述在开始处理本地存储之前某人必须知道的所有主要信息。我相信很多人都在寻找这样的概览..。
概述
通常,您有以下储藏室:
提出以下问题:
MediaStore索引?
2.2如何通过MediaStore获取所有文件?
2.3如何在没有MediaStore的情况下获取所有文件大多数我已经知道的事情,主要是我的问题是基于媒体商店索引的数据,如何找出哪些存储是可用的,如何识别存储.因此,我发布了一个答案,回答了大部分的部分,并显示了每个问题的状态<=> android版本对,这样就可以很容易地看到哪些信息仍然缺失
状态-如果您知道的更多或者我错了,可以扩展/更正我对这些问题的答案。
Android < 4.4
Android 4.4
Android >=5
发布于 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上的查询列出所有文件,其中包含以下URI:MediaStore.<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卡的根目录如下:
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。
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的帮助下)。
https://stackoverflow.com/questions/35231022
复制相似问题