的原因是,安卓Q引入了Scoped Storage机制,对应用访问外部存储进行了限制。在此版本中,应用默认只能访问自身的沙盒目录,并且无法直接访问外部存储的文件。因此,使用Intent.ACTION_OPEN_DOCUMENT无法成功打开文档。
为了解决这个问题,可以通过使用新的API来适配安卓Q的Scoped Storage机制。以下是一些解决方案:
- 使用Document API:安卓Q引入了Document API,它允许应用通过DocumentProvider访问外部存储中的文件。通过使用Document API,可以使应用能够与外部存储进行交互并打开文档。具体的实现可以参考安卓官方文档:Scoped Storage
- 请求Legacy External Storage权限:通过在应用的清单文件中声明请求Legacy External Storage权限,可以将应用切换回旧的外部存储访问方式,即非Scoped Storage模式。这样做的话,应用将能够使用Intent.ACTION_OPEN_DOCUMENT来打开文档。但是需要注意的是,这种解决方案可能会受到安卓未来版本的限制,因为Scoped Storage是Google推荐的存储模式。
综上所述,通过使用Document API或请求Legacy External Storage权限,可以解决在安卓Q中Intent.ACTION_OPEN_DOCUMENT无法起作用的问题。具体选择哪种解决方案取决于应用的需求和迁移策略。