Java 从Google存储访问框架虚拟文件URI获取Google电子表格ID

Java 从Google存储访问框架虚拟文件URI获取Google电子表格ID,java,android,google-sheets,google-cloud-storage,Java,Android,Google Sheets,Google Cloud Storage,我用Intent.ACTION\u OPEN\u文档选择Google电子表格,并可以得到它的虚拟文件URI。 但要使用GoogleSheetsAPI,我需要电子表格ID,而虚拟文件URI似乎不包含它。 如何从Intent.ACTION\u OPEN\u文档接收的数据中获取Google电子表格ID 我的简化代码段: public class MainActivity extends AppCompatActivity { ... public void onMenuFile(Men

我用Intent.ACTION\u OPEN\u文档选择Google电子表格,并可以得到它的虚拟文件URI。 但要使用GoogleSheetsAPI,我需要电子表格ID,而虚拟文件URI似乎不包含它。 如何从Intent.ACTION\u OPEN\u文档接收的数据中获取Google电子表格ID

我的简化代码段:

public class MainActivity extends AppCompatActivity {
    ...
    public void onMenuFile(MenuItem item) {
        // called when 'File' menu item is selected
        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
        intent.setType("*/*");
        startActivityForResult(intent, EDIT_REQUEST_CODE);
    }
    ...

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode != EDIT_REQUEST_CODE || resultCode != Activity.RESULT_OK || data == null) {
            return;
        }
        uri = data.getData();
        if (isVirtualFile(uri)) {
           // here i would like to get spreadsheetID somehow, and use it:
           ValueRange response = service.spreadsheets().values()
               .get(spreadsheetID, sheetTitle)
               .execute();
           List<List<Object>> values = response.getValues();
           ...and so on...
        }
        ...
    }
    ...

    private boolean isVirtualFile(URI uri)) {
       here code from
       https://developer.android.com/training/data-storage/shared/documents-files#java
    }
}
实际的活动类是
com.google.android.apps.docs.app.OpenSafUrlActivity

这将是很好的,看看代码,但我找不到来源

更新

看来我在这里找到了解决办法:

电子表格ID需要硬编码。请参阅以下谷歌代码片段:

public class MainActivity extends AppCompatActivity {
    ...
    public void onMenuFile(MenuItem item) {
        // called when 'File' menu item is selected
        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
        intent.setType("*/*");
        startActivityForResult(intent, EDIT_REQUEST_CODE);
    }
    ...

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode != EDIT_REQUEST_CODE || resultCode != Activity.RESULT_OK || data == null) {
            return;
        }
        uri = data.getData();
        if (isVirtualFile(uri)) {
           // here i would like to get spreadsheetID somehow, and use it:
           ValueRange response = service.spreadsheets().values()
               .get(spreadsheetID, sheetTitle)
               .execute();
           List<List<Object>> values = response.getValues();
           ...and so on...
        }
        ...
    }
    ...

    private boolean isVirtualFile(URI uri)) {
       here code from
       https://developer.android.com/training/data-storage/shared/documents-files#java
    }
}

只能在创建电子表格对象后调用getData()

要了解电子表格id,请转到google drive上所需的表格并查看URL:


这里有更多信息:

但我不需要创建新的电子表格。它已经作为“虚拟文件”存在于谷歌硬盘上。我只想用Intent.ACTION\u OPEN\u文档选择它,然后使用Sheets API读取/更新它。“…找出电子表格id到google drive上所需的表格并查看URL…”不,不是这样。我想使用任意的谷歌电子表格(在我的谷歌硬盘上)通过操作\打开\文档意图来选择它。此时我看不到任何电子表格URL或电子表格ID本身。请更新您的问题以包含您当前使用的代码