我正在尝试开发一款应用,其中我使用Google云端硬盘在service
上传和共享文件。但问题是共享链接具有private
访问权限。我想更改anyone with link
的访问权限。为了实现这一点,我正在使用Google Drive REST API
,但是当我执行代码时似乎没有任何事情发生。这是我的代码:
public void changePermissionSettings(String resourceId) throws GeneralSecurityException, IOException, URISyntaxException {
com.google.api.services.drive.Drive driveService = getDriveService();
JsonBatchCallback<Permission> callback = new JsonBatchCallback<com.google.api.services.drive.model.Permission>() {
@Override
public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders) throws IOException {
Log.e("upload", "Permission Setting failed");
}
@Override
public void onSuccess(com.google.api.services.drive.model.Permission permission, HttpHeaders responseHeaders) throws IOException {
Log.e("upload", "Permission Setting success");
}
};
final BatchRequest batchRequest = driveService.batch();
com.google.api.services.drive.model.Permission contactPermission = new com.google.api.services.drive.model.Permission()
.setType("anyone")
.setRole("reader");
driveService.permissions().create(resourceId, contactPermission)
.setFields("id")
.queue(batchRequest, callback);
new Thread(new Runnable() {
@Override
public void run() {
try {
batchRequest.execute();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
private com.google.api.services.drive.Drive getDriveService() throws GeneralSecurityException,
IOException, URISyntaxException {
Collection<String> elenco = new ArrayList<>();
elenco.add("https://www.googleapis.com/auth/drive");
GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(this, elenco)
.setSelectedAccountName(getAccountName());
return new com.google.api.services.drive.Drive.Builder(
AndroidHttp.newCompatibleTransport(), new JacksonFactory(), credential).build();
}
我在这里有两个问题:
同时使用Google Drive Android API和Google Drive REST API是对的吗?
如何将文件的权限设置从private
更改为anyone with link
? Documentation提及Authorization happens in response to receiving an error when sending a request.
如何在service
??
答案 0 :(得分:0)
“同时使用Google Drive Android API和Google Drive REST API是否正确?”
如上所述here,这是可能的。 “只看这个Lifecycle of a Drive file,你可以想象你的应用程序位于该图片(Android应用程序)和底部的REST API(驱动服务)之上。” < / p>
但要记住以下几点:
GDAA的主要标识符DriveId仅存在于GDAA(GooPlaySvcs)中,并且不存在于REST Api中。您必须检索“ResourceId”,它是REST Api中的主要标识符(请参阅SO 29030110)。
只有在GDAA提交(上传)文件/文件夹后才能从DriveId获取ResourceId(参见SO 22874657)
- 醇>
由于GDAA会根据自己的时间表(系统优化)缓存网络请求,因此会遇到很多时间问题,而REST Api会让您的应用控制等待响应。一般来说,如果你扫描这些SO questions,你会发现很多关于这些问题的喋喋不休(虽然这很麻烦)。
我为GDAA和REST API维护了一个最小的CRUD包装器,如果你合并它们可以帮助你(两者中的MainActivity几乎相同,并且CRUD方法具有相同的签名)。
“如何将文件的权限设置从private
更改为anyone with link
?? Documentation提及Authorization happens in response to receiving an error when sending a request.
如何在服务中实现?” 强>
根据此thread,您必须设置以下permissions:
private Permission insertPermission(Drive service, String fileId) throws Exception{
Permission newPermission = new Permission();
newPermission.setType("anyone");
newPermission.setRole("reader");
newPermission.setValue("");
newPermission.setWithLink(true);
return service.permissions().insert(fileId, newPermission).execute();
}
您还可以查看以下链接:Google Drive SDK - change item sharing permissions。