我的Google云端硬盘帐户中有文件夹,我想在特定文件夹中添加文件。我该怎么做?在example需要DriveId(EXISTING_FOLDER_ID),但我不知道DriveID我的文件夹,我只知道名字。
答案 0 :(得分:4)
行。我在Github上使用Drive演示遇到了同样的问题:https://github.com/googledrive/android-demos
在自述文件的底部,它说:
如果你真的想要运行这个示例应用程序(虽然它主要是 提供以便您可以阅读代码),您需要注册OAuth com.google.android.gms.drive.sample.demo包的2.0客户端,带有您自己的调试密钥,并将任何资源ID设置为您的那些 可使用。资源ID定义已打开:
com.google.android.gms.drive.sample.demo.BaseDemoActivity.EXISTING_FOLDER_ID com.google.android.gms.drive.sample.demo.BaseDemoActivity.EXISTING_FILE_ID
他们没有真正指定应该如何获取并为BaseDemoActivity文件中定义的EXISTING_FOLDER_ID和EXISTING_FILE_ID常量设置resourceID,并且在阅读上面的seanpj注释后,我使用他的方法编号3来查找DriveID以便我可以将它添加到演示应用程序,以便它正常运行。
所有人需要做的就是在PC上转到Drive,然后点击顶部的“链接”按钮。
链接的一部分显示“id = XXXXXXXXXXX”。将其复制并粘贴到演示应用程序中的BaseDemoActivity文件中。对您在Drive上自己创建的文件和文件夹执行此操作。
演示应用程序现在应该成功运行。
答案 1 :(得分:3)
@smokybob。我不知道它是否对原始问题有帮助,但是根据你的评论:
这是一个应该为您提供文件夹/文件DriveId的代码段。 'title','mime'和'fldr'参数是可选的。如果您为'fldr'传递 null ,则搜索是全局的(在应用程序的FILE范围内),否则在指定的文件夹内(不在子文件夹中)。它使用最简单的'await()'风格,必须在UI线程上运行。
但请注意,文件夹/文件名不是Google Drive Universe中的唯一实体。 您可以在一个文件夹中拥有多个具有相同名称的文件/文件夹!
GoogleApiClent _gac; // initialized elsewhere
//find files, folders. ANY 'null' ARGUMENT VALUE MEANS 'any'
public void findAll(String title, String mime, DriveFolder fldr) {
ArrayList<Filter> fltrs = new ArrayList<Filter>();
fltrs.add(Filters.eq(SearchableField.TRASHED, false));
if (title != null) fltrs.add(Filters.eq(SearchableField.TITLE, title));
if (mime != null) fltrs.add(Filters.eq(SearchableField.MIME_TYPE, mime));
Query qry = new Query.Builder().addFilter(Filters.and(fltrs)).build();
MetadataBufferResult rslt = (fldr == null) ?
Drive.DriveApi.query(_gac, qry).await() :
fldr.queryChildren(_gac, qry).await();
if (rslt.getStatus().isSuccess()) {
MetadataBuffer mdb = null;
try {
mdb = rslt.getMetadataBuffer();
if (mdb != null) {
for (Metadata md : mdb) {
if (md == null) continue;
DriveId dId = md.getDriveId(); // here is the "Drive ID"
String title = md.getTitle();
String mime = md.getMimeType();
// ...
}
}
} finally { if (mdb != null) mdb.close(); }
}
}
一般而言,您可以从以下网址获取“DriveId”:
2和3标识符都是字符串,因此可能会混淆。检索驱动器ID时,标识符2更快(通过decodeFromString())。标识符3的检索速度较慢(通过fetchDriveId()),但如果您需要在其他位置使用您的ID(例如,Apps脚本),则非常有用。另请参阅SO 21800257
就创建文件/文件夹而言,我在GitHub here上有一些代码。如果你看看awaits \ MainActivity.java ... buildTree(),你会看到在构建一个简单的文件夹树时递归创建文件夹/文件。
答案 2 :(得分:3)
您可以使用查询来查找文件夹
Query query = new Query.Builder().addFilter(Filters.and(
Filters.eq(SearchableField.TITLE, "folder name"),
Filters.eq(SearchableField.TRASHED, false))).build();
我提供了一个示例教程 http://wiki.workassis.com/android-google-drive-api-deleted-folder-still-exists-in-query/ 在本教程中,他们以异步方式调用
答案 3 :(得分:0)
如果您拥有该文件夹的元数据(或DriveFolder对象,您可以从中获取元数据),则只需拨打getDriveId即可。
如果您拥有网络资源,则可以使用fetchDriveId
使用该资源ID获取DriveId