Google Android 的 Drive SDK:如果我知道文件夹标题,如何获取文件夹 ID
Google Drive SDK for Android: How to get folder id if I know folder title
我需要将文件上传到之前由另一个用户创建的 Google 驱动器上的文件夹,我知道文件夹名称,如何从 android 应用程序以编程方式获取文件夹 ID,如果我知道文件夹名称(标题)。
你的post有两个问题:
- 如何上传其他用户创建的文件夹中的文件?
回答。首先,您需要对该文件夹具有写权限才能在该文件夹中插入一些内容。如果您知道标题和文件以及目标文件夹,则可以使用 CreateFileActivityBuilder class 在文件夹中创建文件。您还可以使用此 class 指定文件的初始元数据和内容。
这里是代码和详细的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
}
}
}
- 获取已知文件夹的文件夹ID:
回答。您至少需要知道 DriveID 才能检索特定文件夹的 folderID。使用文件夹的名称,您将无法检索 folderID,因为可能有很多文件夹名称相同但 ID 不同。
这里是代码和详细的documentation:
private static DriveId sFolderId = DriveId.decodeFromString("DriveId:0B2EEtIjPUdX6MERsWlYxN3J6RU0");
驱动器 Android API 目前仅支持按文件访问,称为文件范围。用户需要通过文件选择器 select 文件夹才能授权您的应用访问它。
我们希望将来能够将云端硬盘范围添加到 Android API,但是我现阶段无法分享时间表。如果您可以在我们的 issue tracker.
上分享有关此功能用例的更多详细信息,那就太好了
在此期间,您应该能够通过 Java REST API.
支持您的用例
正如丹尼尔指出的那样,您必须在您的案例中使用 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
祝你好运
我需要将文件上传到之前由另一个用户创建的 Google 驱动器上的文件夹,我知道文件夹名称,如何从 android 应用程序以编程方式获取文件夹 ID,如果我知道文件夹名称(标题)。
你的post有两个问题:
- 如何上传其他用户创建的文件夹中的文件?
回答。首先,您需要对该文件夹具有写权限才能在该文件夹中插入一些内容。如果您知道标题和文件以及目标文件夹,则可以使用 CreateFileActivityBuilder class 在文件夹中创建文件。您还可以使用此 class 指定文件的初始元数据和内容。
这里是代码和详细的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
}
}
}
- 获取已知文件夹的文件夹ID:
回答。您至少需要知道 DriveID 才能检索特定文件夹的 folderID。使用文件夹的名称,您将无法检索 folderID,因为可能有很多文件夹名称相同但 ID 不同。
这里是代码和详细的documentation:
private static DriveId sFolderId = DriveId.decodeFromString("DriveId:0B2EEtIjPUdX6MERsWlYxN3J6RU0");
驱动器 Android API 目前仅支持按文件访问,称为文件范围。用户需要通过文件选择器 select 文件夹才能授权您的应用访问它。
我们希望将来能够将云端硬盘范围添加到 Android API,但是我现阶段无法分享时间表。如果您可以在我们的 issue tracker.
上分享有关此功能用例的更多详细信息,那就太好了在此期间,您应该能够通过 Java REST API.
支持您的用例正如丹尼尔指出的那样,您必须在您的案例中使用 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
祝你好运