2017-09-06 1 views
0

이메일에 서명하는 것과 같이 클라이언트가 인증을 전혀 원하지 않습니다. 클라이언트는 클릭 할 때 모든 공유 파일을 가져와야합니다.URI가 포함 된 Google 드라이브에서 파일을 다운로드하십시오. Android의 Google 드라이브 API는 없습니다.

많은 곳에서 HTTP GET으로 할 수 있다는 것을 알려주었습니다. Google 드라이브에서 다른 유형의 파일과 크기로 시도했지만 내 코드는 50KB 크기의 파일을 제공합니다. 물론 읽을 수는 없습니다.

  1. 소스 파일은 "Poocha.mp3"입니다 : 여기 예를 들어

    .

  2. Google에서이 파일에 대해 반환 한 공유 가능 ID가 있습니다.

  3. 나는이 ID 즉 공유 할 수있는 문자열이 공유 가능하다는 것을 확인했습니다.

  4. Android 매니페스트에서 모든 권한을 부여 받았습니다.

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.SEND_SMS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.VIBRATE" /> 
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> 
    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" /> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.READ_CONTACTS" /> 
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 
    <uses-permission android:name="android.permission.READ_CALENDAR" /> 
    <uses-permission android:name="android.permission.WRITE_CALENDAR" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    
  5. 에뮬레이터가 아닌 라이브 장치에서 테스트하고 있습니다.

  6. 이 링크를 붙여 넣으면 "https://drive.google.com/uc?export=download&id=0B5Isk4aTJApuZE9sVzg2MUxvc0U", 파일이 브라우저에서 제대로 다운로드됩니다.

  7. 아래의 코드는 드라이브 링크에서 작동하지 않습니다.
    하지만하지만

  8. 내 서버에 동일한 파일을 업로드하고 URL을 변경하면 파일이 아래 코드와 동일하게 올바르게 다운로드됩니다. "pictures.jpg"파일을 사용해 보았지만 Google 드라이브의 모든 파일은 불완전한 50 ~ 54KB 파일을 제공하며 서버의 동일한 파일에 대해 동일한 코드가 작동합니다.

내 코드 :

protected String doInBackground(String... f_url) { 
    int count; 
    String id = "0B5Isk4aTJApuZE9sVzg2MUxvc0U"; 

    try { 

     URL url = new URL("https://drive.google.com/uc?export=download&id=" + id); 

     HttpURLConnection c = (HttpURLConnection) url.openConnection(); 

     c.setRequestMethod("GET"); 

     c.connect(); 

     int lenghtOfFile = c.getContentLength(); 

     InputStream input = new BufferedInputStream(url.openStream(), 8192); 

     String out = Environment.getExternalStorageDirectory().getAbsolutePath() + "/sifr/album"; 

     File filedir = new File(out); 
     if (!filedir.exists()) { 
      filedir.mkdirs(); 
     } 
     OutputStream output = new FileOutputStream(out + "/Poocha.mp3"); 

     byte data[] = new byte[1024]; 

     long total = 0; 

     while ((count = input.read(data)) != -1) { 
      total += count; 
      publishProgress("" + (int) ((total * 100)/lenghtOfFile)); 
      output.write(data, 0, count); 
     } 

     output.flush(); 

     output.close(); 
     input.close(); 

    } catch (Exception e) { 
     Log.i("GetPathLst errr", e + ""); 
    } 
    return null; 
} 

누군가가 문제를 지적 할 수 있을까요?

답변

0

내 드라이브 계정의 공유 파일로 코드를 시도한 후 파일을 다운로드했습니다. Google 드라이브에서 가져온 공유 URL의 형식은 다음과 같습니다.

https://drive.google.com/open?id=UUjBUTaQyakU0B0HGOaFKlT5geXN 

그 외의 변경 사항없이 코드 작업을 완료했습니다. (btw, 그건 진짜 이드가 아닙니다).

이 정보가 도움이되기를 바랍니다.


업데이트

위의 대답은, 진정한 동안, 당신의 문제가 아니다. Google 드라이브가 설치된 상태에서 Android 기기에서 내 URL을 사용해 봤는데 드라이브에서 소유자가 파일을 "휴지통에 담았다"고 말했습니다. 브라우저에서 동일한 URL을 시도하면 OK가 다운로드되었습니다.

분명히 파일을 다운로드 할 수 있지만 드라이브 앱이 파일이 휴지통이 아닌지 확인하기 위해 추가 검사를하는 것처럼 보입니다. 브라우저는 이와 동일한 확인을하지 않으며 수행 할 수 없습니다.

휴지통에서 파일을 옮기거나 다른 파일을 사용해보십시오. 그것은 작동해야합니다.

+0

무엇을 설명 했습니까? @Cheticamp –

+0

그게 진짜 이드가 아니라는 게 무슨 뜻이야? @Cheticamp 링크를 마우스 오른쪽 버튼으로 클릭하고 새 창에서 열면 파일이 다운로드됩니다. 동일한 내 코드에서 작동하지 않습니다. 드라이브 공유 가능 링크를 다운로드하는 동안 문제가 있습니다. 또는 코드가 작동합니다. 그게 내 질문에 초점을 맞 춥니 다. 더 자세히 설명 할 수 있으면 좋을 것입니다. 내 매니페스트 권한을 추가했습니다. –

+0

@masoomnazirsanadi 미안하지만, 그건 분명히 진술하지 않았습니다. 나는 내 대답에서 준 이드가 내 파일의 실제 이드가 아니라는 것을 의미했습니다. 나는 당신의 문제를 발견했다고 생각합니다. 나는 곧 내 대답에 대한 업데이트를 게시 할 것이다. – Cheticamp

관련 문제