这里是内容提供商新手。 我正在尝试使用下面的 Intent 选择器从谷歌驱动器打开文档
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
Intent intent = Intent.createChooser(intent, "Import Document");
我可以从 docx、image 和 pdf 等文件中获取字节,但在尝试打开 native google 文档时,我收到 FileNotFoundException 以及文件是虚拟文件等信息。
有时它会抛出 PermissionDeniel 异常。
我正在使用以下方法读取字节
activity.getContentResolver().openInputStream(contentUri)
非常感谢您的建议。
谢谢。
最佳答案
有一个 Reading Files in Drive API适用于 Android。
打开文件内容
为了能够读取文件,您必须首先以 DriveFile.MODE_READ_ONLY
或 DriveFile.MODE_READ_WRITE
模式打开其 DriveContents 资源,具体取决于您是否喜欢使用 InputStream 或 ParcelFileDescriptor 类。
注意:InputStream 类仅适用于以 READ_ONLY 模式打开的文件。使用 READ_WRITE 打开的文件必须使用 ParcelFileDescriptor 类从文件中读取。
DriveFile.open
方法检索本地同步的文件资源并打开它。如果文件未与本地存储同步,它会从 Drive 服务检索文件并返回 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();
}
};
关于android - 无法使用 Intent.ACTION_GET_CONTENT 从文件选择器的 native 谷歌文档中获取字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46340311/