使用存储访问框架访问设备上的文件的根本区别是什么:
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.type = "image/*"
startActivityForResult(intent, READ_REQUEST_CODE)
并使用此代码:
val intent = Intent()
intent.type = "image/*"
intent.action = Intent.ACTION_GET_CONTENT
startActivityForResult(Intent.createChooser(intent, "Select Picture"), READ_REQUEST_CODE)}
我尝试了这两种方法,视觉结果是一样的。我真的很想了解为什么第一种方法比第二种方法好。
ACTION_GET_CONTENT- 使用 API=1ACTION_OPEN_DOCUMENT- 与 API=19 一起引入(与 SAF 同时)如果您的 targetSdk >=19,那么两个
Intenta 将以相同的方式工作,如果没有,那么第二个将不起作用,只有第一个。在非常古老的 Android
ACTION_GET_CONTENT中,它不会造成任何问题,您必须自己雕刻它Activity,然后由它来处理它。有一些流行的库在其中实现了处理程序ACTION_GET_CONTENT-例如,像这样在 Android 4.3 及以下版本中,为了让应用程序从另一个应用程序接收文件,它必须触发一个意图,例如,
ACTION_PICK或ACTION_GET_CONTENT. 之后,用户必须选择任何一个应用程序来接收文件,并且它必须为用户提供一个可以选择和接收文件的界面。从 Android 4.4 及更高版本开始,开发人员有一个名为 intent 的附加选项
ACTION_OPEN_DOCUMENT,它显示系统管理的选择元素的用户界面。该元素为用户提供了其他应用程序中所有可用文件的概览。使用这个单一界面,用户可以从任何支持的应用程序中选择一个文件。Intent
ACTION_OPEN_DOCUMENT不能替代 intentACTION_GET_CONTENT。开发人员应使用最适合应用程序需求的一种:ACTION_GET_CONTENT程序只需要读取或导入数据,请使用。使用这种方法,应用程序会导入数据的副本,例如图像文件。ACTION_OPEN_DOCUMENT程序需要能够对文档提供者拥有的文档进行长期、持久的访问,请使用此选项。一个例子是照片编辑器,它允许用户编辑存储在文档提供程序中的图像。