【发布时间】:2018-08-15 03:43:30
【问题描述】:
我正在尝试将代码添加到我的 android 应用程序中,该应用程序从 UI 获取信息并附加到谷歌驱动器中的文件。我已经登录和授权,以及按名称查询文件。我读过的大部分 SO 线程都是针对旧 API 或 REST API 的。
但是,我想以读/写或只写模式打开它。我试过查看快速入门演示和驱动 API,但都没有帮助。
如何以编程方式获取 driveId?我尝试从驱动器本身获取 ID。有没有办法构建从查询中获取 ID 的元数据?
如果我使用openFile(DriveId.decodeFromString(actual_id).asDriveFile()
我收到以下错误:
java.lang.IllegalArgumentException: Invalid DriveId: **actual_id**
从共享链接获取文件 ID 错误:drive.google.com/open?id=some_id
如果是这样,我该如何实现?
private String id = "1fuTq1Q6MHrchgW7sZImjvSfpAShHhsbx";
private DriveFile file = DriveId.decodeFromString(id).asDriveFile();
private void getFile() {
Query q = new Query.Builder().addFilter(Filters.and(Filters.eq(SearchableField.TITLE, "HelloWorld.txt"))).build();
}
private void appendFile() {
Task<DriveContents> openTask = getResourceClient().openFile(file, DriveFile.MODE_READ_WRITE);
openTask.continueWithTask(task -> {
DriveContents driveContents = task.getResult();
ParcelFileDescriptor pfd = driveContents.getParcelFileDescriptor();
long bytesToSkip = pfd.getStatSize();
try (InputStream in = new FileInputStream(pfd.getFileDescriptor())) {
// Skip to end of file
while (bytesToSkip > 0) {
long skipped = in.skip(bytesToSkip);
bytesToSkip -= skipped;
}
}
try (OutputStream out = new FileOutputStream(pfd.getFileDescriptor())) {
out.write("Hello world".getBytes());
}
// [START drive_android_commit_contents_with_metadata]
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setStarred(true)
.setLastViewedByMeDate(new Date())
.build();
Task<Void> commitTask =
getResourceClient().commitContents(driveContents, changeSet);
// [END drive_android_commit_contents_with_metadata]
return commitTask;
})
.addOnSuccessListener(this,
aVoid -> {
//showMessage(getString(R.string.content_updated));
Log.i("DRIVE", "Sucess");
finish();
})
.addOnFailureListener(this, e -> {
Log.e(TAG, "Unable to update contents", e);
// showMessage(getString(R.string.content_update_failed));
finish();
});
}
【问题讨论】:
-
如果你碰巧查看了这个SO post,有人指出这是适用于 Android 的 Drive API 的限制,他们正在改用 Drive REST API。
-
所以这个“功能”并没有被 Google 记录,即使 API 说它是可能的?
-
在修修补补的 30 分钟内,我能够制作一个 java REST 应用程序,它可以抓取文件并列出它们的名称/ID。代码不那么密集,而且令人惊讶地更有意义..
标签: java android google-drive-api