2014-03-25 4 views

답변

3

먼저 드라이브를 DRIVE_FILE 범위에서 열어야하므로 RESTful API을 사용해야합니다. GDAA에는 FILE 범위 만 있으며 Android 앱이 만들지 않은 항목은 표시되지 않습니다. 평온한 API에서

, 3 단계 과정
  • 사용 GET (실제의 getContent()) ('제목'에 의해 쿼리) 파일의 URL을 얻을

    1. 사용 LIST 파일을 검색 할 수있다 내용
    2. 바이너리 스트림을 얻을 자체 쿼리 및 필드를 형성하기 위해 페이지 하단에있는 '그것을 시도'놀이터를 사용, 1 단계 및 2 모두에서 SD 카드

    에 저장 올바르게 착각해라. 3 단계는 다른 곳에서도 잘 설명되어 있습니다. 다음은 몇 가지가 아웃 오브 컨텍스트 위의 코드 (AsyncTask를 같은) 비 UI 스레드에 있어야 코드에서

    com.google.api.client.googleapis.extensions 
        .android.gms.auth.GoogleAccountCredential _crd = 
        GoogleAccountCredential.usingOAuth2(this, Arrays.asList(DriveScopes.DRIVE_FILE)); 
    com.google.api.services.drive.Drive _svc = 
    new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), _crd).build(); 
    
    // step 1: get the file list of files 
    com.google.api.services.drive.model.FileList gooLst = 
    _svc.files().list().setQ([YOUR_REQUEST_STRING]) 
        .setFields("items(title,downloadUrl)").execute(); 
    // get the URL from your list matching the title with the requested one 
    
    // step 2: get the file contents 
    InputStream is = _svc.getRequestFactory() 
    .buildGetRequest(new GenericUrl([URL_FROM_LIST])) 
    .execute().getContent(); 
    
    // step 3: stream it to you file 
    strm2File(is, [YOUR_FILE_NAME]); 
    
    private void strm2File(InputStream inStrm, String flNm) { 
        try { 
        OutputStream outStrm = 
         new FileOutputStream(new java.io.File(_ctx.getExternalFilesDir(null), flNm)); 
        try { 
         try { 
         final byte[] buffer = new byte[1024]; 
         int read; 
         while (((read = inStrm.read(buffer)) != -1) && (!isCancelled())) 
          outStrm.write(buffer, 0, read); 
         outStrm.flush(); 
         } finally {outStrm.close();} 
        } catch (Exception e) {} 
        inStrm.close(); 
        } catch (Exception e) {} 
    } 
    

    1 단계와 2 단계를 도울 수이고에가 오류 처리의 많은이 있습니다 주위에 (UserRecoverableAuthIOException ...) 구현해야합니다.

  • +0

    YOUR_REQUEST_STRING 및 URL_FROM_LIST에 대해 자세히 설명 할 수 있습니까? –

    +1

    YOUR_REQUEST_STRING - 여기에서 "qryClause"변수를 참조하십시오. https://github.com/seanpjanson/RESTDemo/blob/master/app/src/main/java/com/spjanson/restdemo/REST.java. URL_FROM_LIST - gooLst는 객체 목록이며, 각 객체에는 "downloadUrl"멤버 var가 있습니다. – seanpj

    0

    이것은 새로운 Android API를 사용하여 간단하게 수행 할 수 있습니다. 웹에 업로드 한 앱과 Android의 앱 ID가 동일한 경우 앱에 이미 파일에 대한 액세스 권한이 있습니다. 이 경우 query 기능을 사용하여 파일을 찾을 수 있습니다.

    그렇지 않으면 OpenFileActivity을 사용하고 사용자가 다운로드 할 apk를 선택하도록 요청할 수 있습니다.

    파일의 DriveId를 가져 오면 read contents 가이드에 따라 콘텐츠를 열 수 있습니다.

    +0

    나 혼란스러워. 예를 들어 사용자가 브라우저 (draganddrop)를 사용하여 파일을 업로드하면 Android 앱에 액세스 할 수 있다고 말하고 있습니까? – seanpj

    +0

    아니요, 파일을 업로드 한 웹 앱이 있으면 일치하는 Android 앱에 액세스 할 수 있습니다. 드라이브 웹 UI를 사용하여 파일을 업로드 한 경우 OpenFileActivity 플로를 사용해야합니다. –

    +0

    죄송합니다 (불쾌한 것은 중간 이름입니다), OpenFileActivity 흐름이 DRIVE_FILE 범위에서 작동한다는 의미입니까? – seanpj

    관련 문제