标签: google-drive-android-api

计划在Android google驱动器API中的drive.appdata范围

我想在新的Android应用程序即开发中使用特殊应用程序数据文件夹中的文件(又名drive.appdata范围).

谷歌的那些人在与Google Play Services 4.2捆绑在一起的新版Google云端硬盘Android API中做得非常出色.

但我发现它不可能在Android API中使用appdata文件夹,因为只有范围drive.file.现在我必须在android中使用通用的java/web api.

有计划在android API中实现drive.appdata范围吗?什么时候 ?

提前致谢

google-drive-api google-drive-android-api

5
推荐指数
1
解决办法
575
查看次数

适用于Android的Google Drive API - 仅限Drive.SCOPE_FILE访问权限,需要只读

所以我有点新手,我希望列出Google云端硬盘中的所有文件和文件夹.

我已经下载了新的SDK,获得了所有授权的应用程序等.我使用示例选择带有开启工具的文件夹,然后在Listview中显示内容.

但是 - 没有显示文件.它仅显示所选文件夹中的所有子文件夹.

所以新的SDK似乎只有SCOPE_FILE访问权限,我收集的只允许应用程序查看它创建的文件,或者用户自己选择的文件.

但是因为我需要能够列出给定文件夹中的所有文件和文件夹,所以这对我来说根本不起作用.

从进一步阅读开始,我似乎必须使用REST Java API(或其他东西),这样我就可以获得对文件和元数据的只读访问权限.

问题是,我无法根据Jar文件等找到我需要的内容,以及我应该放在哪里.

记住,我是这一切的新手.

我正在使用Android Studio,所以有人可以告诉我:

  • 我需要什么JAR文件

  • 我应该把它们放在哪里(在libs文件夹中?)

  • 我是否需要编辑build.gradle以包含它们?

  • 任何授权的例子?

  • 以及列出文件和文件夹的示例,例如在ROOT文件夹中

  • 我是否需要新的SDK?

感谢您的帮助.

android google-drive-api google-drive-android-api

5
推荐指数
1
解决办法
1537
查看次数

Android - 从其他设备访问Google云端硬盘appdata文件夹,但相同的应用

我的应用设置为允许将备份保存到Google云端硬盘应用数据文件夹.它在同一台设备上运行良好.当我进行备份时,删除应用程序的数据,然后恢复所有工作.

但是,当我尝试在一台设备上进行备份,然后安装在另一台设备上并尝试恢复时,找不到任何文件.当我在原始设备上卸载应用程序,在同一设备上重新安装并尝试还原时,也是如此.这两种情况都导致没有找到文件,尽管我在登录Google云端硬盘时看到appdata文件夹中有文件.

我在某处读过你必须使用RESOURCE_ID而不是文件的DRIVE_ID才能在设备之间工作,因为DRIVE_ID会因设备而异.但是,我看到如何获取RESOURCE_ID的唯一方法是使用driveId.getResourceId(),我无法从其他设备获取正确的DRIVE_ID.

tl; dr:我该如何从另一台设备/安装创建的appdata文件夹中检索正确的文件?

android google-drive-api google-drive-android-api

5
推荐指数
1
解决办法
2116
查看次数

用户断开驱动器中的应用程序会导致FILE范围内的数据丢失

我已经遇到过这个问题几次了,但我永远都不会指责它,把它归咎于GDAA的延迟,我的错误代码等......我终于想出了一个我可以安全地重现它的场景,所以我想问一下那些知道这是我不理解的功能还是一个普通错误的人.如果是后者,请指出我可以唠叨的地方.

为简单起见,我将在REST API的背景上讨论它.

1 /让我们拥有一个在DRIVE_FILE范围内运行的Drive API认证应用

com.google.api.services.drive.Drive svc = 
  new Drive.Builder(
    AndroidHttp.newCompatibleTransport(), 
    new GsonFactory(),
    GoogleAccountCredential
    .usingOAuth2( context, Collections.singletonList(DriveScopes.DRIVE_FILE))
  ).build();
Run Code Online (Sandbox Code Playgroud)

2 /使用在Google驱动器中创建文件(文件/文件夹)

svc.files().insert([METADATA], [CONTENT]).execute();
Run Code Online (Sandbox Code Playgroud)

3 /搜索您使用的对象

svc.files().list().setQ([QUERY]).setFields([FIELDS]).execute();
Run Code Online (Sandbox Code Playgroud)

当应用程序运行时,用户将执行通常的Account-Pick/Drive-Authorize例程,一切都按预期工作.创建文件,可见,可以找到......直到用户通过以下方式撤销授权

设置>管理应用>断开驱动器

drive.google.com中.

之后,如果Android应用程序重新启动(并重新授权),则撤消之前创建的任何对象都不可见.

可能是设计,我不知道.如果是这种情况,我无法找到Android应用程序如何获取之前创建的任何内容.我当然可以使用DRIVE范围创建另一个"维护"应用来解决这个问题,但......

现在,就GDAA而言,它变得更糟.不仅GDAA没有DRIVE范围来修复它,而且如果完成相同的步骤序列并且应用程序在撤销后立即创建文件/文件夹,GDAA不会抱怨,但根本不会创建文件/文件夹.过了一会儿(分钟),重新授权弹出,但是,同时创建的文件无处可寻,撤销之前的所有内容都会丢失给(创建者)应用程序(它当然可见显然具有DRIVE范围的Web应用程序).

谢谢你的耐心等待.

google-drive-api google-drive-android-api

5
推荐指数
1
解决办法
402
查看次数

Android Google Play/Drive Api

您好我正在使用Google Drive Api使用AppDataFolder工具存储数据库.我有一个测试应用程序在一台设备上成功运行.我能够上传/更新/删除/下载数据库文件,并将其重新集成到程序中,没有任何问题.

我遇到的问题是,当我想与运行相同应用程序的其他设备共享此数据库时,事情无法按预期工作.示例设备AI上传数据库,设备B - 我想下载数据库但没有找到文件(这种延迟可能在几秒到几小时之间变化很大).原因 - 当使用Api时,它决定何时"同步"数据,因为它排队而不是即时上传.因此,当在一台设备上使用时,这不是问题,因为它需要来自云存储的"同步"文件或等待同步的文件.

我尝试过各种各样的事情,例如尝试列出所有AppDataFolder文件或通过带有可搜索过滤器的查询检索元数据,然后再发出请求更新/删除等等.但是,我无法让它根据需要从根本上选择何时同步.

所以我的实际问题是:如何在我需要时强制Google Drive同步我的文件,即每次发出请求时,都可以使用同一个应用程序在多个设备上实现同步.必须有一个答案,因为我认为这是你使用AppDataFolder的第一个根本原因.

提前致谢

编辑/ UPDATE:

我已经能够在Api中找到一个选项,使用以下代码"同步"驱动器内容:

            // try to sync
            Drive.DriveApi.requestSync(mGoogleApiClient).setResultCallback(new ResultCallback<com.google.android.gms.common.api.Status>() {
                @Override
                public void onResult(com.google.android.gms.common.api.Status status) {
                    if (!status.getStatus().isSuccess()) {
                        Log.e("SYNCING", "ERROR" + status.getStatusMessage());
                    } else {
                        Log.e("SYNCING", "SUCCESS");
                        // execute async task to list AppFolderContents
                        new AppFolderContentsAsyncTask(getActivity()).execute();
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

这适用于快速连续3/4次尝试,但是我达到了同步限制和状态消息:

超出了ERRORSync请求速率限制.

是否有任何方法可以提高请求率,因为如果我必须有一个提示用户的应用程序'请稍后再试一次同步 - 不确定你需要多久等到你可以!

解决方案 - 对于港口和我的想法(其价值)

我正在寻找的解决方案(通过电子邮件发送一个发布了同步而没有问题的驱动器应用程序的应用程序开发者)是使用Drive REST Api,而不是更新(和Google首选)的Drive API.我尝试将'requestSync'限制为仅当用户导航到带有Drive选项的片段(而不是每个文件事务)时.然而,这可能会解决大多数情况下的requestSync速率限制,但它仍然可以达到该限制.此外,如果多个设备正在运行应用程序,并且链接到同一个驱动器帐户同时在应用程序中同步/上传/删除文件,则可能会失去同步 - 可能是一种罕见的情况,但仍然可能.在用户体验或应用程序设计方面,我不认为让用户等待同步文件是一个可行的选择.

但好奇 - 实际的Drive应用程序允许您根据需要多次刷新(requestSync?).我在网络界面上快速连续创建了20个文件夹,在创建每个文件夹后,我刷新了手机上的云端硬盘应用程序并同步了20次.谷歌似乎理解同步的重要性,但选择在新的Drive API中确保这一点非常困难.如前所述,将文件上传到云存储通常会立即发生(它排队等候,但是如果你有连接,它几乎会立即发生).我认为这是移动数据/更新驱动器内容方面的代价高昂的交易,而不仅仅是查询文件的同步.但是,您可以一次一个地向您的驱动器应用程序添加文件,并且几乎立即上传一个文件 - 在30秒内请求同步超过4次然后失败并且您必须'冷静下来' 一阵子.

我对编程/ Android一般都很陌生 - 只要我学到新东西,我就会意识到我实际上并不知道,所以如果他们使用Drive API(而不是REST API)是更好的解决方案我会非常欢迎它.

android google-api google-drive-api google-drive-android-api

5
推荐指数
1
解决办法
1517
查看次数

通过Intent.ACTION_SEND共享文件时,Google驱动器会将文件名更改为Intent.EXTRA_SUBJECT

我有以下代码通过Intent.ACTION_SEND共享文件.最后一行显示选择器,以便用户可以选择适当的应用程序.当我选择电子邮件时,一切都很好,文件附在电子邮件中.另一方面,当我选择谷歌驱动器时,文件上传到谷歌驱动器,但文件的名称更改为"备份"这是主题.也就是说,如果我打电话,shareBackup("/sdcard/001.mks")那么Google驱动器上的文件名是"备份"而不是"001.mks".我的代码有问题吗?

public void shareBackup(String path) {  
    String to = "YourEmail@somewhere.com";
    String subject = "Backup";
    String message = "Your backup is attached";
    Intent email = new Intent(Intent.ACTION_SEND);
    email.putExtra(Intent.EXTRA_EMAIL, new String[] { to });
    email.putExtra(Intent.EXTRA_SUBJECT, subject);
    email.putExtra(Intent.EXTRA_TEXT, message);
    File f = new File(path);
    email.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f));       
    email.setType("text/*");
    startActivity(Intent.createChooser(email, "Send"));     
}
Run Code Online (Sandbox Code Playgroud)

android android-intent google-drive-android-api

5
推荐指数
1
解决办法
846
查看次数

使用Google Drive API时无限的"选择帐户"循环

我正在尝试使用Google Drive REST API概述中的指南设置一个可以操作存储在我的个人Google云端硬盘帐户中的文件的Android应用.

我已按照示例代码允许用户连接到该帐户,但无论是选择了帐户名还是按下了取消按钮,"选择帐户"对话框都会不断重新出现.

我相信问题是,即使在从帐户选择器对话框中选择了帐户名称之后,该refreshResults()方法仍会在测试时保持返回null mCredential.getSelectedAccountName().然而,不知道为什么会发生这种情况或如何解决它.如果有经验的人能告诉我,我会非常感激.谢谢.

我的代码如下:

import android.accounts.AccountManager;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GoogleApiAvailability;
import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential;
import com.google.api.client.googleapis.extensions.android.gms.auth.GooglePlayServicesAvailabilityIOException;
import com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.ExponentialBackOff;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.api.services.drive.model.FileList;

import java.io.IOException;
import …
Run Code Online (Sandbox Code Playgroud)

android google-drive-android-api

5
推荐指数
1
解决办法
1844
查看次数

GoogleApiClient连接失败:ConnectionResult {statusCode = SIGN_IN_REQUIRED,

我试图将Google云端硬盘集成到我的应用程序中,但收效甚微。使用快速启动存储库中的代码,每次选择登录用户帐户时,都会收到以下错误消息:

I/DriveDemo: GoogleApiClient connection failed: ConnectionResult{statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent{867e070: android.os.BinderProxy@13cdfe9}, message=null}
Run Code Online (Sandbox Code Playgroud)

我已按照以下网址上的说明进行操作:

  1. https://developers.google.com/drive/android/get-started
  2. https://github.com/googledrive/android-quickstart

并观看了以下视频:

  1. https://youtu.be/RezC1XP6jcs

我也看了无数Stack Overflow问题和答案,却不知道我在做什么错。

manifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.lightkeeper54.chuck.drivedemo">

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

码:

protected void onResume() {
    super.onResume();
    if (mGoogleApiClient == null) {
        // Create the API client and bind it to an instance variable.
        // We use this instance as the callback for connection and connection …
Run Code Online (Sandbox Code Playgroud)

android google-drive-api google-play-services google-drive-android-api

5
推荐指数
1
解决办法
4120
查看次数

Android-使用适用于Android的Google Drive API

For my App I need to have a List sync with Google Drive. I have already implemented the SignIn and had my Main_Activity implement both:

com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks,
com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener
Run Code Online (Sandbox Code Playgroud)

Even though I read the whole Google Drive API for Android documentation, and more specifically the Store Application Data part. And looked through the example on GitHub, I wasn't able to get it to work. I personally think that this documentation is really confusing to read. It's not even clear what is …

android google-drive-android-api

5
推荐指数
1
解决办法
1527
查看次数

将数据存储到Google驱动器的备份标签中,而不是驱动器文件夹中

我需要实现类似whatsapp的功能,方法是单击应用程序中的备份按钮,将所有聊天记录存储到Google驱动器。并根据需要将其还原到新设备中。

我在下面找到了实现此目标的参考,但有些却无法成功完成。

https://developer.android.com/guide/topics/data/backup.html

https://developer.android.com/guide/topics/data/data-storage.html

https://developer.android.com/guide/topics/data/data-storage.html#db

此数据备份选项是否可以满足我的要求,或者我需要做其他事情?

我成功地将文件上传到了Google Drive的文件夹中,但是我需要使用应用名称的Google Drive备份选项卡中的数据。

谁能指导我如何实现这一目标或提供一些参考?

提前致谢..!

drive whatsapp android-backup-service google-drive-android-api

5
推荐指数
1
解决办法
1030
查看次数