Android SAF
这里就不介绍SAF的相关背景,内部实现啥的了,相关知识网上一搜一大堆。
这里主要介绍SAF的相关操作。
别的程序和SAF之间的通信主要是通过Intent进行通信的。别的程序通过调用startActivityForResult(Intent intent, int requestCode),启动SAF。然后在SAF中进行相关操作之后,SAF返回URI。
Intent.ACTION_GET_CONTENT
该Intent主要是打开SAF,让用户选择一个文件。程序获取到文件的Uri,然后可以进行相关的自定义的操作。
代码:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES,
new String[]{"application/octet-stream", "message/rfc822"});
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
上面的代码中setType()方法是设置SAF中哪些文件是处于可以选择状态的。"*/*"表示全部的文件都处于可以选择状态。常见的格式网上有,这边也不介绍了。
intent.putExtra(Intent.EXTRA_MIME_TYPES,new String[]{"application/octet-stream", "message/rfc822"})这句代码是设置多个文件Type的,像这边就是设置了"application/octet-stream", "message/rfc822"这两个Type的文件是处于可以选择状态的。
这边看起来好像就跟上面的setType重复了一样。但是其实是这样的,如果你只想让某一种类型格式格式的文件处于可选择状态,只需要在setType中设置相关的类型格式就完全OK了,比如setType("message/rfc822")这样。
但是有时候,我们是想让多种类型格式的文件处于可选择状态的,这个时候就需要使用intent.putExtra(Intent.EXTRA_MIME_TY