我需要将文件上传到以前由其他用户创建的Google云端硬盘中的文件夹,我知道文件夹名称,如果我知道文件夹名称(标题),如何从Android应用程序以编程方式获取文件夹ID。
答案 0 :(得分:1)
Drive Android API目前仅支持每个文件访问,称为文件范围。用户需要通过文件选择器选择文件夹才能授权您的应用访问它。
我们希望以后能够将Android范围添加到Android API,但是我无法在此阶段共享时间轴。如果您可以在issue tracker上分享有关此功能的更多使用案例详情,那就太棒了。
在此期间,您应该能够使用Java REST API支持您的用例。
答案 1 :(得分:1)
正如Daniel指出的那样,你必须在你的情况下使用REST Api。更具体地说,这是一种方法:
static com.google.api.services.drive.Drive mGOOSvc;
/**************************************************************************
* find file/folder in GOODrive
* @param prnId parent ID (optional), null searches full drive, "root" searches Drive root
* @param titl file/folder name (optional)
* @param mime file/folder mime type (optional)
* @return arraylist of found objects
*/
static ArrayList<ContentValues> search(String prnId, String titl, String mime) {
ArrayList<ContentValues> gfs = new ArrayList<>();
if (mGOOSvc != null) try {
// add query conditions, build query
String qryClause = "'me' in owners and ";
if (prnId != null) qryClause += "'" + prnId + "' in parents and ";
if (titl != null) qryClause += "title = '" + titl + "' and ";
if (mime != null) qryClause += "mimeType = '" + mime + "' and ";
qryClause = qryClause.substring(0, qryClause.length() - " and ".length());
Drive.Files.List qry = mGOOSvc.files().list().setQ(qryClause)
.setFields("items(id,mimeType,labels/trashed,title),nextPageToken");
String npTok = null;
if (qry != null) do {
FileList gLst = qry.execute();
if (gLst != null) {
for (File gFl : gLst.getItems()) {
if (gFl.getLabels().getTrashed()) continue;
gfs.add( UT.newCVs(gFl.getTitle(),gFl.getId()));
}
npTok = gLst.getNextPageToken();
qry.setPageToken(npTok);
}
} while (npTok != null && npTok.length() > 0);
} catch (Exception e) { /* handle the exceptions*/ }
return gfs;
}
您所追求的是 gFl.getId() 。您仍然必须获取 com.google.api.services.drive.Drive mGOOSvc 。有关完整背景信息,请参阅此Github demo
祝你好运
答案 2 :(得分:0)
您的帖子中有两个问题:
答。首先,您需要拥有该文件夹的写入权限才能在该文件夹中插入一些内容。如果您已知道标题和文件以及目标文件夹,则可以使用 CreateFileActivityBuilder 类在文件夹中创建文件。您还可以使用此类指定文件的初始元数据和内容。
以下是代码和详细documentation:
ResultCallback<DriveContentsResult> contentsCallback = new
ResultCallback<DriveContentsResult>() {
@Override
public void onResult(DriveContentsResult result) {
if (!result.getStatus().isSuccess()) {
// Handle error
return;
}
MetadataChangeSet metadataChangeSet = new MetadataChangeSet.Builder()
.setMimeType("text/html").build();
IntentSender intentSender = Drive.DriveApi
.newCreateFileActivityBuilder()
.setInitialMetadata(metadataChangeSet)
.setInitialDriveContents(result.getDriveContents())
.build(getGoogleApiClient());
try {
startIntentSenderForResult(intentSender, 1, null, 0, 0, 0);
} catch (SendIntentException e) {
// Handle the exception
}
}
}
答。您需要至少知道DriveID才能检索特定文件夹的folderID。使用文件夹的名称,您将无法检索folderID,因为可能有许多文件夹具有相同的名称但ID不同。
以下是代码和详细documentation:
private static DriveId sFolderId = DriveId.decodeFromString("DriveId:0B2EEtIjPUdX6MERsWlYxN3J6RU0");