我想从谷歌驱动器下载文件,我使用的依赖关系是compile 'com.google.android.gms:play-services:8.4.0'
,并使用这个我能够从下面的例子中获得 meta数据的链接。
mFileId = (DriveId) data.getParcelableExtra(
OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID);
final DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient, mFileId);
new Thread(new Runnable() {
@Override
public void run() {
// DO your work here
DriveResource.MetadataResult mdRslt = file.getMetadata(mGoogleApiClient).await();
if (mdRslt != null && mdRslt.getStatus().isSuccess()) {
String link = mdRslt.getMetadata().getWebContentLink();
String name=mdRslt.getMetadata().getTitle();
Log.d("LINK", link);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && getApplication().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
else
{
new get_download_data(link,name).execute();
}
}
}
}).start();
}
从Google Drive获取链接后,我调用异步任务从链接下载该文件。所以我的问题是,当我下载文件时,它没有打开。经过检查和调试,我发现我的文件下载不正常。
例如,我的文件名为abc.pdf
,大小为400kb。我下载到我的sd卡上,但abc.pdf
只有56 kb。我正在使用下面的代码下载。我不知道我做错了什么。请帮助。谢谢。
public class get_download_data extends AsyncTask<Void,Void,String>
{
File apkStorage = null;
File outputFile = null;
String link1="";
String name1="";
public get_database_data(String link, String name) {
this.link1=link;
this.name1=name;
}
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... params) {
try {
URL url = new URL(link1);//Create Download URl
HttpURLConnection c = (HttpURLConnection) url.openConnection();//Open Url Connection
c.setRequestMethod("GET");//Set Request Method to "GET" since we are grtting data
c.setDoInput(true);
c.connect();//connect the URL Connection
//If Connection response is not OK then show Logs
if (c.getResponseCode() != HttpURLConnection.HTTP_OK) {
Log.e(TAG, "Server returned HTTP " + c.getResponseCode()
+ " " + c.getResponseMessage());
}else{
Log.e(TAG, "Server returned HTTP " + c.getResponseCode()
+ " " + c.getResponseMessage());
}
//Get File if SD card is present
if (new CheckForSDCard().isSDCardPresent()) {
apkStorage = new File(
Environment.getExternalStorageDirectory() + "/"
+ "checkdb");
} else
Toast.makeText(getApplication(), "Oops!! There is no SD Card.", Toast.LENGTH_SHORT).show();
//If File is not present create directory
if (!apkStorage.exists()) {
apkStorage.mkdir();
Log.e(TAG, "Directory Created.");
}
outputFile = new File(apkStorage, name1);//Create Output file in Main File
//Create New File if not present
if (!outputFile.exists()) {
outputFile.createNewFile();
Log.e(TAG, "File Created");
}
OutputStream fos = new FileOutputStream(outputFile);//Get OutputStream for NewFile Location
InputStream is = c.getInputStream();//Get InputStream for connection
BufferedInputStream inStream = new BufferedInputStream(is, 1024);
byte[] buffer = new byte[1024];//Set buffer type
int len1 = 0;//init length
while ((len1 = inStream.read(buffer)) != -1) {
fos.write(buffer, 0, len1);//Write new file
}
//Close all connection after doing task
fos.flush();
fos.close();
is.close();
} catch (Exception e) {
//Read exception if something went wrong
e.printStackTrace();
outputFile = null;
Log.e(TAG, "Download Error Exception " + e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(String result_1) {
super.onPostExecute(result_1);
String downlodepath = Environment.getExternalStorageState()+"/"+name1;
Log.e("Sdpath",""+imagePath);
Toast.makeText(getApplication(), "download"+downlodepath, Toast.LENGTH_SHORT).show();
}
}
我发现这个链接在这里,但有些我不知道如何实现这一点。请让我知道我错了。谢谢。
5条答案
按热度按时间ggazkfy81#
经过一些工作和尝试了这么多的例子,我找到了答案。下面是我在我的项目中添加的依赖关系:
下面是我的清单文件:
以下是我的主要活动:
下面是API密钥的字符串文件:
kxeu7u2r2#
在Drive API中下载文件时,我使用
webContentLink
的方式是在Javascript中打开一个新的浏览器窗口。我建议您在Android中这样做,就像post中提到的那样:
c90pui9n3#
对于那些仍然陷入这个问题的人。不知何故,下载网址不能在
driveResourceClient.createFile()
之后返回此时我们只能得到文件名(这个可能已经定义好了)
在我的情况下,我并不真的需要的URL后,上传,但当用户点击复制URL按钮
我刚刚成功了。
hgncfbus4#
你可以很容易地做到这一点,使用chrome自定义选项卡,只需粘贴自定义选项卡中的url,它将显示驱动器的网站,一个可以下载的文件参考此官方文档的chrome自定义选项卡https://developer.chrome.com/multidevice/android/customtabs这是一个真正的高超功能和webview的最佳替代品
liwlm1x95#
最简单的方法下载文件通过谷歌驱动器的URL在Android是通过导航到浏览器。在这种方式下,我们可以下载任何数据,如.apk,. mp4,. txt。
在Kotlin