2016-10-27 26 views
0

我想开发一个应用程序,其中我使用谷歌驱动器上传和共享文件在service。但是,问题是共享链接有private访问权限。我想改变对anyone with link的访问权限。为了实现我使用Google Drive REST API,但是当我执行代码时似乎没有发生。这里是我的代码:连接到谷歌API后台服务的Java客户端

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(); 
    } 

我有两个问题在这里:

  1. 那么,是否可以同时使用谷歌云端硬盘Android API和谷歌驱动器REST API一起?

  2. 如何将文件的权限设置从private更改为anyone with linkDocumentation提到Authorization happens in response to receiving an error when sending a request.如何才能实现service ?? “

回答

0

”是否同时使用Google Drive Android API和Google Drive REST API?“

如所述here,这是可能的。 “只要看看这个Lifecycle of a Drive file,就可以将您的应用想象成最上方的图片(Android应用),底部的REST API(Drive Service)。”

有几点要记住,虽然:

  1. 的GDAA的主要标识,驱动器Id住在GDAA(GooPlaySvcs)仅在REST API不存在。您必须检索“ResourceId”,它是REST Api中的主要标识符(请参阅SO 29030110)。

  2. RESOURCEID可以从驱动器Id后才GDAA提交(上传)的文件/文件夹中获得(见SO 22874657

  3. 你会碰到很多造成的事实,时间问题是GDAA“缓冲区”网络请求在它自己的时间表(系统优化),而REST Api让你的应用程序控制等待响应。一般来说,如果你扫描这些SO questions,你会发现很多关于这些问题的喋喋不休(尽管如此)。

我保持两个GDAA最小的CRUD包装和REST API,可以帮助你,如果你把它们合并(以两者在MainActivity几乎是相同和CRUD方法具有相同的签名)。

“如何改变从private文件的权限设置,以anyone with linkDocumentation提到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

相关问题