Google Drive API - Android - 如何获取驱动器文件ID?
我想开发一个android应用程序,可以读取存储在我的谷歌驱动器文件夹中的xml文件,这个想法首先是试图打开文件并处理内容。Google Drive API - Android - 如何获取驱动器文件ID?
我读过Google Drive API docs for android,我达到了我迷路的地步,它正在处理文件内容。
根据这一指导开从驱动器中的文件的方式是这样的:
DriveFile file = ...
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(contentsOpenedCallback);`
搜索我意识到,完整的代码(即它们不包括有):
DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient,DriveId.bg(id));
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(contentsOpenedCallback);`
好问题在于我不知道文件“id”。我已经尝试从谷歌驱动器的网页链接的id,像这样(https://drive.google.com/open?id = 1EafJ-T6H4xI9VaUuUO5FMVb9Y30xyr7OHuISQ53avso & authuser = 0),但没有工作。
我发现这个问题的解决方案是从应用程序创建文件。使用谷歌驱动api演示程序中的类("CreateFileActivity.java")。
有了这个类,我保存了全局DriveId变量中新文件的返回Driveid。
public void leer(){
DriveFile file = Drive.DriveApi.getFile(getGoogleApiClient(),Id);
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null)
.setResultCallback(contentsOpenedCallback);
}
ResultCallback<DriveApi.DriveContentsResult> contentsOpenedCallback =
new ResultCallback<DriveApi.DriveContentsResult>() {
@Override
public void onResult(DriveApi.DriveContentsResult result) {
if (!result.getStatus().isSuccess()) {
Log.e("Error:","No se puede abrir el archivo o no se encuentra");
return;
}
// DriveContents object contains pointers
// to the actual byte stream
DriveContents contents = result.getDriveContents();
BufferedReader reader = new BufferedReader(new InputStreamReader(contents.getInputStream()));
StringBuilder builder = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
String contentsAsString = builder.toString();
Log.e("RESULT:",contentsAsString);
}
};
上的“打开文件”代码,但是如何编辑其中的内容文件,请你可以发布一些代码? – Achin 2016-06-18 09:50:54
您可以使用DriveAPI查询方法来检索有关特定文件的任何信息。您需要定义一个查询对象为以下:
Query query = new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE, "HelloWorld.java"))
.build();
,并设置一个回调函数来遍历的结果:
Drive.DriveApi.query(googleApiClient, query)
.setResultCallback(new OnChildrenRetrievedCallback() {
@Override
public void onChildrenRetrieved(MetadataBufferResult result) {
// Iterate over the matching Metadata instances in mdResultSet
}
});
你可以找到关于该主题在这里更多的信息:https://developers.google.com/drive/android/queries
几个月前我一直在玩这个东西,并且在github上仍然有一些代码。它可能是非常过时(libver 15左右),但它可以作为参考点,它是(我希望很简单)。 Look here。把它拉下来,插入,穿过。修复了什么不工作:-)。我前段时间放弃了它。
请注意Google Drive Android API对象有两个不同的ID,请参阅SO 22841237。
通常,您通常从知道文件/文件夹名称开始,查询GDAA以获取对象列表。它们中的每一个都将产生DriveID和ResourceID。 DriveID在您的应用程序中用于操纵对象(并不意味着您的Android应用程序和/或设备以外的任何内容)。 ResourceID是在URL中以不同形式出现的字符串,可以在应用程序之外使用(例如Web浏览器)。看看这wrapper有些感觉它是如何工作的。但是,它又回了几个版本,所以没有保证。好运...
您可以尝试打开驱动器:
这个ID的另一种方法,我所说的文件,并读取它(如果我愿意我可以编辑从谷歌驱动的Web应用程序此文件的信息)然后文件选择器使用newOpenFileActivityBuilder API,允许用户选择一个Drive文件。该API调用的回调将返回所选文件的DriveId,然后您可以像现在一样获取内容。请参阅https://developers.google.com/drive/android/intro#files和https://developers.google.com/drive/android/ – Shailendra 2015-12-06 10:52:03