Intereting Posts
   

Google Drive API – Android – 如何获取驱动器文件ID?

我正在尝试开发一个可以读取存储在我的google驱动器文件夹中的xml文件的Android应用程序,这个想法首先是尝试打开文件并处理内容。

我已经阅读了针对Android的Google Drive API文档,并且我已经达到了丢失的程度,它正在使用文件内容。

根据本指南,从驱动器打开文件的方法是这样的:

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)但是没有用。

您可以使用DriveAPI Query方法来检索有关特定文件的任何信息。 您需要定义查询对象,如下所示:

 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 } }); 

您可以在此处find有关该主题的更多信息: https : //developers.google.com/drive/android/queries

我发现这个问题的解决方案是从应用程序创建文件。 使用google drive api demo app中的类( “CreateFileActivity.java” )。

在这个类中,我将新文件中的返回Driveid保存在全局DriveIdvariables中。

 final private ResultCallback fileCallback = new ResultCallback() { @Override public void onResult(DriveFolder.DriveFileResult result) { if (!result.getStatus().isSuccess()) { Log.e("","Error while trying to create the file"); return; } Id=result.getDriveFile().getDriveId(); Log.e("","Created a file with content: " + Id); } }; 

然后在另一种方法中使用此ID我调用该文件并将其读取(如果我想我可以从Google Drive Web App编辑此文件信息):

  public void leer(){ DriveFile file = Drive.DriveApi.getFile(getGoogleApiClient(),Id); file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null) .setResultCallback(contentsOpenedCallback); } ResultCallback contentsOpenedCallback = new ResultCallback() { @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); } }; 

几个月前我一直在玩这个东西,并且仍然在github上有一些代码。 它可能非常过时 (libver 15左右),但它可以作为参考点,它是(我希望简单)。 看这里 将其拉下,插入,逐步完成。 修复什么不再起作用:-)。 我不久前放弃了它。

请注意,Google Drive Android API对象有2个不同的ID,请参阅SO 22841237 。

通常,您通常从知道文件/文件夹名称开始,查询GDAA以获取对象列表。 它们中的每一个都将产生DriveID和ResourceID。 您的应用中使用DriveID来操纵对象(并不代表Android应用和/或设备之外的任何内容)。 ResourceID是在URL中以不同forms出现的字符串,可以在您的应用程序外部使用(例如Web浏览器……)。 看看这个包装器,以了解它是如何工作的。 但同样,它有几个版本,所以没有保证。 祝你好运…