[android] upload to Google Drive with folder and permission

오디오 파일을 MMS로 보내는 방법을 못 찾아서 다른 방법으로 우회하기로 했다.

 

일단 어지간한 소스는 전부 https://developers.google.com/drive/quickstart-android 에서 가져왔다.

 

구글 드라이브에 특정한 이름의 폴더가 있는지 검사해서 없으면 만들고, 그 폴더에 내가 지정한 파일을 업로드한다.

그리고 그 파일은 다른 사람이 다운로드 받을 수 있게 권한도 변경했다.

 

근데 매번 아이디 선택하는 화면 떠야만 하는건가….

private void saveFileToDrive()
{
  Thread t = new Thread(new Runnable()
  {
     @Override
     public void run()
     {
        try
        {
           boolean hasFolder = false;
           File targetFolder = null;

           // 폴더 목록 검색
           Files.List request = service.files().list().setQ("mimeType='application/vnd.google-apps.folder' and trashed=false");
           FileList files = request.execute();

           for (File folder : files.getItems())
           {
              // 원하는 폴더 있는지 검사
              if (folder.getTitle().equals("TestSendSMS"))
              {
                 hasFolder = true;
                 targetFolder = folder;
                 break;
              }
           }

           // 원하는 폴더 없으면 새로 만들기
           if (!hasFolder)
           {
              File folderBody = new File();
              folderBody.setTitle("TestSendSMS");
              folderBody.setMimeType("application/vnd.google-apps.folder");
              targetFolder = service.files().insert(folderBody).execute();
           }

           // 파일 정보 세팅
           java.io.File fileContent = new java.io.File(fileUri.getPath());
           FileContent mediaContent = new FileContent("audio/mp4", fileContent);

           // 위에서 정한 폴더에 파일 넣기
           File body = new File();
           body.setTitle(fileContent.getName());
           body.setMimeType("audio/mp4");
           body.setShared(true);
           body.setParents(Arrays.asList(new ParentReference().setId(targetFolder.getId())));

           File file = service.files().insert(body, mediaContent).execute();
           if (file != null)
           {
              // 파일을 전체 공개로 변경하기
              Permission permission = new Permission();
              permission.setType("anyone");
              permission.setRole("reader");
              permission.setValue("anyone");
              service.permissions().insert(file.getId(), permission).execute();
              Log.i("MainActivity.java | run", "|" + file.getWebContentLink());
           }
        }
        catch (UserRecoverableAuthIOException e)
        {
           e.printStackTrace();
        }
        catch (IOException e)
        {
           e.printStackTrace();
        }
     }
  });
  t.start();
}