无法使用 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_ONLY
或 DriveFile.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();
}
};
这里是内容提供商新手。 我正在尝试使用下面的意图选择器从 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_ONLY
或 DriveFile.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();
}
};