无法使用 Intent.ACTION_GET_CONTENT 从文件选择器的本机 google 文档中获取字节

Can't able get bytes from native google document from File Chooser using Intent.ACTION_GET_CONTENT

这里是内容提供商新手。 我正在尝试使用下面的意图选择器从 google 驱动器打开文档

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");   
Intent intent = Intent.createChooser(intent, "Import Document");

我可以从 docx、图像和 pdf 等文件中获取字节,但是当尝试打开本机 google 文档时,我收到 FileNotFoundException 以及文件是虚拟文件等信息。

有时会抛出 PermissionDeniel 异常。

我正在使用以下方法读取字节

activity.getContentResolver().openInputStream(contentUri)

非常感谢您的建议。

谢谢。

Android有一个 Reading Files in Drive API

打开文件内容

为了能够读取文件,您必须首先以 DriveFile.MODE_READ_ONLYDriveFile.MODE_READ_WRITE 模式打开其 DriveContents 资源,具体取决于您更喜欢使用 InputStream 还是 ParcelFileDescriptor class.

注意:InputStream class 仅适用于以READ_ONLY 模式打开的文件。使用 READ_WRITE 打开的文件必须使用 ParcelFileDescriptor class 从文件中读取。

DriveFile.open方法获取本地同步文件资源并打开。如果文件未与本地存储同步,它会从 Drive 服务和 returns DriveContents 资源中检索文件。例如:

DriveFile file = ...
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null)
        .setResultCallback(contentsOpenedCallback);

DriveContents 资源包含文件二进制流的临时副本,仅供您的应用程序使用。如果多个应用程序正在访问同一个文件,则 DriveContents 资源之间不存在竞争条件。在这种情况下,最后一次写入操作将是内容的最终状态。

处理响应需要您检查调用是否成功。如果调用成功,您可以检索 DriveContents 资源。此资源包含检索 InputStream 或 ParcelFileDescriptor 以读取文件的二进制内容的方法。以下示例演示如何检索文件的 DriveContents:

ResultCallback<DriveContentsResult> contentsOpenedCallback =
        new ResultCallback<DriveContentsResult>() {
    @Override
    public void onResult(DriveContentsResult result) {
        if (!result.getStatus().isSuccess()) {
            // display an error saying file can't be opened
            return;
        }
        // DriveContents object contains pointers
        // to the actual byte stream
        DriveContents contents = result.getDriveContents();
    }
};