【发布时间】:2017-09-07 19:02:31
【问题描述】:
我根本不希望客户进行任何身份验证,例如登录他的电子邮件或其他任何东西。客户端必须在点击时获取所有共享文件。
很多地方都给出了,它可以通过 HTTP GET 来完成。我在 Google Drive 中尝试过使用不同类型的文件和大小,但我的代码给了我大约 50 kb 的文件,这当然是不可读的。
这里举个例子:
源文件是“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 Drive 上的每个文件都提供了 50 到 54 kb 的不完整文件,并且相同的代码适用于我服务器上的同一个文件。
我的代码:
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;
}
谁能指出问题所在?
【问题讨论】:
标签: java android download google-drive-api uri