이메일에 서명하는 것과 같이 클라이언트가 인증을 전혀 원하지 않습니다. 클라이언트는 클릭 할 때 모든 공유 파일을 가져와야합니다.URI가 포함 된 Google 드라이브에서 파일을 다운로드하십시오. Android의 Google 드라이브 API는 없습니다.
많은 곳에서 HTTP GET으로 할 수 있다는 것을 알려주었습니다. Google 드라이브에서 다른 유형의 파일과 크기로 시도했지만 내 코드는 50KB 크기의 파일을 제공합니다. 물론 읽을 수는 없습니다.
소스 파일은 "Poocha.mp3"입니다 : 여기 예를 들어
.
Google에서이 파일에 대해 반환 한 공유 가능 ID가 있습니다.
나는이 ID 즉 공유 할 수있는 문자열이 공유 가능하다는 것을 확인했습니다.
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" />
에뮬레이터가 아닌 라이브 장치에서 테스트하고 있습니다.
이 링크를 붙여 넣으면 "https://drive.google.com/uc?export=download&id=0B5Isk4aTJApuZE9sVzg2MUxvc0U", 파일이 브라우저에서 제대로 다운로드됩니다.
아래의 코드는 드라이브 링크에서 작동하지 않습니다.
하지만하지만내 서버에 동일한 파일을 업로드하고 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;
}
누군가가 문제를 지적 할 수 있을까요?
무엇을 설명 했습니까? @Cheticamp –
그게 진짜 이드가 아니라는 게 무슨 뜻이야? @Cheticamp 링크를 마우스 오른쪽 버튼으로 클릭하고 새 창에서 열면 파일이 다운로드됩니다. 동일한 내 코드에서 작동하지 않습니다. 드라이브 공유 가능 링크를 다운로드하는 동안 문제가 있습니다. 또는 코드가 작동합니다. 그게 내 질문에 초점을 맞 춥니 다. 더 자세히 설명 할 수 있으면 좋을 것입니다. 내 매니페스트 권한을 추가했습니다. –
@masoomnazirsanadi 미안하지만, 그건 분명히 진술하지 않았습니다. 나는 내 대답에서 준 이드가 내 파일의 실제 이드가 아니라는 것을 의미했습니다. 나는 당신의 문제를 발견했다고 생각합니다. 나는 곧 내 대답에 대한 업데이트를 게시 할 것이다. – Cheticamp