有没有办法从文件选择器意图中获取 Google Sheets fileid?

ban*_*nsz 5 android android-intent google-sheets-api

在我的 Android 应用程序中,我希望用户打开 Google Sheets 文档,将其中的数据导入到应用程序数据库中。

  1. ACTION_GET_CONTENT使用/ACTION_OPEN_DOCUMENT和 MIME 过滤器可以轻松选择文件application/vnd.google-apps.spreadsheet。(这将是一个虚拟文件。)

  2. 使用基于云端硬盘归档 ID(具有用户授予的范围)的 Google Sheets API 也可以轻松获取 Google Sheets 文档的内容spreadsheets.readonly

Sheets.Builder(transport, jsonFactory, appCredential)
   .build()
   .spreadsheets()
   .get(fileid)
   .execute()
Run Code Online (Sandbox Code Playgroud)

但第一步返回设备上文件的Uri,第二步需要Drive文件的文件id
如何从第一个中确定第二个?

我发现的唯一糟糕的解决方案是使用 Google Drive API:我使用从意图中获得的名称搜索 Sheets 文件,然后获得它的 id...它需要范围drive.metadata.readonly,这是一个受限范围,并且doh...无论如何这都不是一个可行的解决方案...
我可以从虚拟文件的uri下载pdf,但它不适合导入数据。

如果有人知道答案,万分感谢!

Tab*_*er1 0

这取决于是什么类型fileId。(我不熟悉那个特定的API)。

一般来说,您需要使用ContentResolver将 转换Uri为一些可用的类型,例如InputStreamFileDescriptor等。

还有DocumentFile实用程序类可用于处理文档 URI。