我有我的谷歌云端硬盘帐户的文件夹,我想在特定的文件夹中添加文件。 我该怎么做? 在例如需要驱动器Id(EXISTING_FOLDER_ID),但我不知道我的驱动器Id文件夹,我只知道名字。
Answer 1:
如果你有一个文件夹(或DRIVEFOLDER对象,从中可以获取元数据)的元数据,你可以叫getDriveId 。
如果你是网络资源,您可以使用使用资源ID获得驱动器Id fetchDriveId
Answer 2:
好。 我经历过同样的问题,与在Github上的驱动器演示: https://github.com/googledrive/android-demos
在自述的底部,它说:
如果你真的想运行此示例应用程序(虽然它主要是提供这样你就可以读取的代码),你需要注册一个OAuth 2.0客户端与包com.google.android.gms.drive.sample.demo您自己的调试键和设置的任何资源标识那些可以访问。 资源ID定义的:
com.google.android.gms.drive.sample.demo.BaseDemoActivity.EXISTING_FOLDER_ID com.google.android.gms.drive.sample.demo.BaseDemoActivity.EXISTING_FILE_ID
他们并没有真正指定一个应该如何准确获取和设置在BaseDemoActivity文件和阅读上述seanpj意见后确定的EXISTING_FOLDER_ID和EXISTING_FILE_ID常数RESOURCEID,我用他的方法3号找到DriveIDs这样我就可以把它添加到演示程序,使其正常运行。
所有的人需要做的是去您的PC上驱动器,然后点击顶部的“链接”按钮。
链路的一部分说“ID = XXXXXXXXXXX”。 复制并粘贴到演示程序的BaseDemoActivity文件。 这样做既为一个文件,你的驱动器自己创建一个文件夹。
演示程序现在应该运行成功。
Answer 3:
@smokybob。 我不知道如果它与原来的问题有所帮助,但每次您的评论:
这里有一个代码段应该让你的文件夹/文件驱动器Id。 在“标题”,“默”和'FLDR的论点是可选的。 如果你传递null“FLDR”,搜索是全球性的(应用程序的文件范围之内),否则指定的文件夹内(而不是在子文件夹,虽然)。 它采用了最简单的 - “等待()”的味道,那必须要跑出UI线程。
不过要小心,文件夹/文件名不是在谷歌驱动宇宙唯一实体。 你可以有多个同名的文件/文件夹一个文件夹!
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(); }
}
}
总体而言,你可以得到“驱动器Id”您需要:
- 文件/文件夹名中的代码如上图所示,或
- 你从得到的字符串标识“encodeToString()”。 我用它来缓存MYROOT文件夹ID,例如,或
- 你从得到的字符串标识“getResourceId()”。 这是你在HTML地址看到字符串。 但是,因为你唯一的范围文件,不要指望用它来打开一些您的应用程序没有创造。
既2个3标识是字符串,所以它们可以被混淆。 标识符2是更快检索驱动器ID时(通过decodeFromString())。 标识符3较慢检索(通过fetchDriveId()),但如果你需要把你的ID在其他地方(Google Apps脚本,例如)有用。 又见SO 21800257
至于创建文件/文件夹而言,我有一些代码GitHub上这里 。 如果你看一下等待着\ MainActivity.java ... buildTree(),您将构建一个简单的文件夹树递归时看到的文件夹/文件的创建。
Answer 4:
您可以使用查询来查找文件夹
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/在本教程中他们被异步调用