我不希望客户端进行任何身份验证,例如登录他的电子邮件或任何其他内容。客户端必须在点击时获取所有共享文件。
在很多地方都可以通过HTTP GET完成它。我在Google云端硬盘中尝试过不同类型的文件和大小,但是我的代码给了我大约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;
}
有人可以指出问题吗?
答案 0 :(得分:0)
我已经在我的云端硬盘帐户上使用共享文件尝试了您的代码,并将文件下载确定。我从Google云端硬盘获得的共享网址格式为:
https://drive.google.com/open?id=UUjBUTaQyakU0B0HGOaFKlT5geXN
除此之外,您的代码无需修改即可运行。 (顺便说一下,那不是真正的身份)。
我希望这会有所帮助。
<强>更新强>
上述答案虽然属实,但不是你的问题。我刚刚在安装了Google云端硬盘的Android设备上尝试了您的网址,而云端硬盘告诉我,所有者已经&#34;删除&#34;文件。当我在浏览器中尝试使用相同的URL时,它下载了OK。
显然,该文件可供下载,但Drive应用程序似乎进行了额外检查以确保文件未被删除。浏览器没有,也无法进行同样的检查。
从垃圾箱中移动文件或尝试使用其他文件。它应该工作。