2017-01-30 4 views
1

사용 사례가 있습니다 ... Android 앱이 있습니다. 내 사용자가 나는 또한 내 사용자가 서로의 구성을 공유 할 수 싶습니다 특정 디렉토리 구조Android 앱에서 액세스 할 수 있도록 드라이브 폴더와 하위 폴더를 일괄 승인 할 수 있나요?

My Drive/ 
    appName/ 
    folderA/ 
     fileA1 
     fileA2 
     ... 
     fileAN 
    folderB/ 
     fileB1 
     fileB2 
     ... 
     fileBN 

에 자신의 Google 드라이브에 일부 데이터 파일을 구성하고 싶습니다.

My Drive/  # User1's drive 
    appName/ 
    folderA/ 
     fileA1 
     fileA2 
     ... 
     fileAN 
    folderB/ 
     fileB1 
     fileB2 
     ... 
     fileBN 

    folderC/ # User2's MyDrive/appName/folderC, which they shared with User1 
     fileC1 
     fileC2 
     ... 
     fileCN 

이 폴더에는 잠재적으로 수백 개의 파일이 있습니다.

내 앱에서 파일을 삭제하거나 이름을 바꾸거나 만들 필요가 없습니다. 만이 디렉토리 구조를 탐색하고 파일의 내용을 읽어야합니다.

사용자가 이미 익숙한 의미를 사용하여 데이터 파일을 관리하기를 원합니다. 일반적인 Google 드라이브 웹 애플리케이션을 사용하여 파일 콘텐츠를 생성/관리/수정하십시오.

내가 읽기 시작한 것부터 ... 드라이브와 같습니다. 파일 범위는 내가 계획 한 워크 플로우에 문제를 일으킬 것입니다. 문서에서 "이것은 사용자가 응용 프로그램에서 열었거나 작성한 파일 만 쿼리로 일치시킬 수 있음을 의미합니다."

사용자가 "이 Android 앱에 '내 드라이브/appName'아래의 파일에 대한 읽기 전용 액세스 권한이 있음을 알리려면 어떻게해야합니까?

Google 드라이브 Android API가 유스 케이스에 맞지 않습니까? 대신 Google 드라이브 REST API에 집중해야하나요?

답변

0

예, Google 드라이브 자바 API를 사용하면 더 편리 할 것입니다.

참고 : 안드로이드 드라이브 API 만 https://www.googleapis.com/auth/drive.file 범위에서 작동 안드로이드 드라이브 API 페이지 (https://developers.google.com/drive/android/queries)에, 있다고한다. 즉, 사용자가 응용 프로그램에서 열거 나 작성한 파일 만 조회로 일치시킬 수 있습니다.

Google 드라이브 Java API (https://developers.google.com/drive/v3/web/quickstart/java)의 가이드를 따르세요. 그것은 안드로이드에서 작동하도록 꽤 많은 수정이 필요합니다. 출발을 위해 여기에 Google 드라이브 서비스를 요청하는 방법에 대한 작업 코드가 있습니다. 당신은 READONLY

// Retrieve drive service 
    com.google.api.services.drive.Drive service = null; 
    synchronized (signInLock) { 
     try { 
      if (googleSignInAccount == null) { 
       Log.d(TAG, "Wait for google sign in"); 
       signInLock.wait(); 
      } 
      GoogleAccountCredential credential = GoogleAccountCredential 
        .usingOAuth2(this, Arrays.asList(SCOPES)) 
        .setBackOff(new ExponentialBackOff()) 
        .setSelectedAccountName(googleSignInAccount.getEmail()); 
      service = new com.google.api.services.drive.Drive.Builder(
        AndroidHttp.newCompatibleTransport(), 
        JacksonFactory.getDefaultInstance(), credential) 
        .setApplicationName(Version.APP_NAME) 
        .build(); 
     } catch (InterruptedException e) { 
      Log.d(TAG, "InterruptedException " + e.getMessage()); 
     } catch (Exception e) { 
      Log.d(TAG, "Error while getting drive service " + e.getMessage()); 
      return; 
     } 
    } 
    if (service == null) { 
     Log.d(TAG, "Drive service is null"); 
     return; 
    } 

로 범위를 변경할 수 있습니다 그리고 이것은 당신이 googleSignInAccount

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions 
      .DEFAULT_SIGN_IN) 
      .requestEmail() 
      .requestScopes(Drive.SCOPE_FILE) 
      .build(); 

    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addApi(Drive.API) // Google Drive Android API 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) // Google Sign-in Api 
      .addConnectionCallbacks(this) // ConnectionCallbacks 
      .addOnConnectionFailedListener(this) // OnConnectionFailedListener 
      .build(); 

private void googleSilentSignIn() { 
    OptionalPendingResult<GoogleSignInResult> pendingResult = Auth.GoogleSignInApi.silentSignIn(
      mGoogleApiClient); 
    if (pendingResult.isDone()) { 
     // There's immediate result available. 
     handleSignInResult(pendingResult.get()); 
    } else { 
     // There's no immediate result ready, waits for the async callback. 
     pendingResult.setResultCallback(new ResultCallback<GoogleSignInResult>() { 
      @Override 
      public void onResult(@NonNull GoogleSignInResult result) { 
       handleSignInResult(result); 
      } 
     }); 
    } 
} 

private void handleSignInResult(GoogleSignInResult result) { 
    Log.d(TAG, "handleSignInResult: " + result.isSuccess()); 
    if (result.isSuccess()) { 
     googleSignInAccount = result.getSignInAccount(); 
     synchronized (signInLock) { 
      signInLock.notify(); 
     } 
    } 
} 
얻는 방법이다