标签: google-drive-android-api

示例项目在Android中以编程方式备份​​Google Drive上的Sqlite文件和照片

我正在编写一个具有即时消息功能的应用程序.用户可以在IM功能中写入文本或共享图像.当图像存储在设备中时,图像文本数据和文件名存储在sqlite文件中.

由于我的服务器不会保留数据,因此当用户切换到新设备时,用户将无法获得聊天记录.通过参考whatsapp,他们允许用户定期将聊天记录和图像备份到Google云端硬盘,并从驱动器中获取数据,如下图所示.

在此输入图像描述 当我去我自己的谷歌驱动器时,我会发现"Whatsapp"已连接到我的谷歌驱动器,如下所示.

在此输入图像描述 我不熟悉Android中的Google Drive API,我想以与Whatsapp相同的方式备份我的sqlite数据库和图像.我知道有关sqlite数据库备份到Google云端硬盘的问题很少,但它似乎只包含部分代码,这使初学者很难理解.

是否会在github上有任何示例项目,有关stackoverflow或教程的问题,这将使我能够学习如何在Android中逐步以编程方式备份​​sqlite数据库和图像

此外,我很惊讶地看到只有whatsapp连接到我的Google云端硬盘,但没有更多其他应用,所以我不知道第三方开发者是否会拥有与Google云端硬盘相同的访问权限并以与WhatsApp的.

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

13
推荐指数
1
解决办法
3133
查看次数

com.google.android.gms.common.api.ApiException:17:API:Drive.API_CONNECTIONLESS在此设备上不可用

这是故事.大约三年前,我已将Google Drive Android SDK(8.1.0)集成到我的应用程序(AnyCopy)中.我按照教程正确设置,包括添加凭据和api密钥.一切都运转正常.我可以毫无问题地备份和恢复我的数据.即使在今天,如果我从Google Play下载它也可以.

最近我一直在尝试重构AnyCopy并将最新的Google Drive Android SDK(Google Play服务版本号12.0.1)集成到我的应用程序中并遇到奇怪的错误消息

java.util.concurrent.ExecutionException:com.google.android.gms.common.api.ApiException:17:API:Drive.API_CONNECTIONLESS在此设备上不可用.com.google.android.gms.tasks.Tasks.zzc(未知来源)com.google.android.gms.tasks.Tasks.await(未知来源)

但是,如果我使用其他签名密钥在Google控制台上创建新凭据.问题得到解决.我意识到问题源于凭证配置.但是,我无法弄清楚如何解决它,因为它可能是Google Drive SDK向后兼容性错误.还有其他人遇到过这个问题吗?他会高度赞赏任何建议.

android backwards-compatibility google-drive-api google-play-services google-drive-android-api

12
推荐指数
1
解决办法
3107
查看次数

Google Drive 上传错误:“系统调用期间出现 I/O 错误,软件导致连接中止”

我开发了一个 Android 应用程序,用户可以使用该应用程序将大文件(大小约 1 到 2 GB)上传到他/她的Google Drive 帐户

我正在使用适用于 Android的Google Drive Rest API有时,上传操作失败并出现以下异常:

javax.net.ssl.SSLException: Read error: ssl=0xcfe9ee80: I/O error during system call, Software caused connection abort
    at com.android.org.conscrypt.NativeCrypto.SSL_read(Native Method)
    at com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:758)
    at com.android.okhttp.okio.Okio$2.read(Okio.java:141)
    at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:211)
    at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:316)
    at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:310)
    at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:206)
    at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:239)
    at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:104)
    at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:1156)
    at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:976)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:509)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:438)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:567)
    at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
    at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java)
    at com.google.api.client.http.javanet.NetHttpResponse.<init>(NetHttpResponse.java:37)
    at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:94)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:981)
    at com.google.api.client.googleapis.media.MediaHttpUploader.executeCurrentRequestWithoutGZip(MediaHttpUploader.java:545)
    at com.google.api.client.googleapis.media.MediaHttpUploader.resumableUpload(MediaHttpUploader.java:417)
    at com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:336)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:427) …
Run Code Online (Sandbox Code Playgroud)

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

11
推荐指数
0
解决办法
5705
查看次数

如何在新版Google云端硬盘Android API下切换帐户

我在新版Google云端硬盘Android API中的授权流程如下:

  1. 菜单:选择帐户
  2. 连接();
  3. onConnectionFailed()result.startResolutionForResult()调用AccountSelectDialog/DriveAuthorization
  4. onConnected()做你的东西

奇迹般有效.现在重复以切换帐户为目标:

  1. 菜单:选择帐户
  2. 连接();
  3. onConnected()

在这里,我没有机会进入AccountSelectDialog,因为我从未使用'result'来获取onConnectionFailed()来调用startResolutionForResult().这次我错过了什么?

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

10
推荐指数
3
解决办法
9078
查看次数

如何以编程方式将以文件夹形式存在的多个图像发送到Android驱动器?

我想发送我的内部存储中存在的多个图像,当我选择该文件夹时,我想将该文件夹上传到谷歌驱动器.我已经尝试了这个谷歌驱动器api的Android https://developers.google.com/drive/android/create-file ,我使用下面的代码,但它显示了一些错误getGoogleApiClient

代码是

ResultCallback<DriveContentsResult> contentsCallback = new
        ResultCallback<DriveContentsResult>() {
    @Override
    public void onResult(DriveContentsResult result) {
        if (!result.getStatus().isSuccess()) {
            // Handle error
            return;
        }

        MetadataChangeSet metadataChangeSet = new MetadataChangeSet.Builder()
                .setMimeType("text/html").build();
        IntentSender intentSender = Drive.DriveApi
                .newCreateFileActivityBuilder()
                .setInitialMetadata(metadataChangeSet)
                .setInitialDriveContents(result.getDriveContents())
                .build(getGoogleApiClient());
        try {
            startIntentSenderForResult(intentSender, 1, null, 0, 0, 0);
        } catch (SendIntentException e) {
            // Handle the exception
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何方法将图像发送到驱动器或Gmail?

android image file-manager google-drive-android-api

10
推荐指数
1
解决办法
1213
查看次数

每次调用connect时,如何强制GoogleApiClient提示帐户选择器UI?

每当我在第一个应用程序启动周期中第一次运行代码

GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(context)
    .addApi(Drive.API)
    .addScope(Drive.SCOPE_APPFOLDER) // required for App Folder sample
    .addConnectionCallbacks(this)
    .addOnConnectionFailedListener(this)
    .build();

mGoogleApiClient.connect();
Run Code Online (Sandbox Code Playgroud)

我可以看到以下帐户选择器.

在此输入图像描述

但是,如果之前的连接成功,并且我在第二个应用程序启动周期中第一次再次运行相同的代码.

帐户选择器不会再次弹出.GoogleApiClient将使用帐户名称,我在之前的应用程序启动周期中选择.

我希望每次都能弹出我的帐号选择器.

我遇到了如何清除GoogleApiClient默认帐户和凭据

建议的解决方案不适合我的情况.

mGoogleApiClient.clearDefaultAccountAndReconnect()
Run Code Online (Sandbox Code Playgroud)

如果我已连接上一个应用程序周期,并且我在当前应用程序周期中第一次调用上面的代码,我将得到以下异常.

java.lang.IllegalStateException: GoogleApiClient is not connected yet.
    at com.google.android.gms.common.internal.zzx.zza(Unknown Source)
    at com.google.android.gms.common.api.internal.zzj.clearDefaultAccountAndReconnect(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

以下代码也不起作用.

if (mGoogleApiClient.isConnected()) {
    // No chance to execute this code, if you run this code during app launch.
    mGoogleApiClient.clearDefaultAccountAndReconnect();
} else {
    // No account chooser will pop up if you had been …
Run Code Online (Sandbox Code Playgroud)

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

10
推荐指数
2
解决办法
6324
查看次数

如何在android下载谷歌驱动器文件

我想从谷歌驱动器下载文件.为此,我已在Google Drive SDk中实施并使用以下方法.

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case REQUEST_CODE_OPENER:
            if (resultCode == RESULT_OK) {
                DriveId driveId = (DriveId) data.getParcelableExtra(
                        OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID);


            }
            finish();
            break;
        default:
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我也尝试使用输出流但无法将数据保存到文件中.

我试过搜索这个,但找不到任何有用的链接,可以指导我如何下载和存储文件.

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

10
推荐指数
1
解决办法
6668
查看次数

Google Drive REST API仍然需要GET_ACCOUNTS权限吗?

Google已弃用Google Drive Android API.

我们正在迁移到Google Drive REST API(v3).

2年前,我们有使用Google Drive REST API(v2)的经验.我们知道需要GET_ACCOUNTS权限才能GoogleAuthUtil.getToken()正常使用 - Google Drive API - 名称不能为空:null(但我已将有效的帐户名称传递给GoogleAccountCredential)

当我们查看Google Drive REST API(v3)的示例 - https://github.com/gsuitedevs/android-samples/blob/master/drive/deprecation/app/src/main/AndroidManifest.xml#L5时,我们注意到谷歌团队确实明确提到过

<!-- Permissions required by GoogleAuthUtil -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,当我们运行示例应用程序(https://github.com/gsuitedevs/android-samples/tree/master/drive/deprecation)时,Android 6和8没有弹出运行时权限对话框.但是,该应用程序可以正常工作.

我们预计应用程序无法正常运行,因为没有GET_ACCOUNTS为该应用授予任何权限.但是,它仍可以使用Google云端硬盘服务进行身份验证和通信,而不会出现问题.

这是我到目前为止测试的内容

我已经在Android 5,Android 6和Android 8中进行了测试.没有GET_ACCOUNTS为Android 6和Android 8授予运行时权限.

我也进一步的测试,通过移除GET_ACCOUNTSMANAGE_ACCOUNTS从清单完全.不过,Android 5,Android 6和Android 8都可行.在运行之前,我有清晰的缓存和清晰的应用程序存储空间.


那么,GET_ACCOUNTSGoogle Drive REST API仍然需要运行时权限请求吗?

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

9
推荐指数
1
解决办法
602
查看次数

使用Sheets API v4(Java)获取Google表格上次编辑日期

我在Android中使用Google表格API v4.

https://developers.google.com/sheets/api/quickstart/android

我需要知道最后一次修改工作表的时间(包括用户); 我需要这个人:

在此输入图像描述

我想做这样的事情:

    Spreadsheet spreadsheet = sheetsService.spreadsheets().get(spreadsheetId).setIncludeGridData(true).execute();
    Date date = spreadsheet.getProperties().getLastEditDate();
Run Code Online (Sandbox Code Playgroud)

但是,当然,不getLastEditDate()存在这样的属性方法.是否有参数或其他API方法来调用以获取此数据?

更好的方法是获取每个单元格的修改日期......但我会考虑整个电子表格或表格的日期.

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

8
推荐指数
2
解决办法
2735
查看次数

从Google云端硬盘URI获取路径

我正在使用Android文件选择并从应用程序存储(图像,视频,文档)中选择文件.我有一个函数"getPath".我从uri得到路径.我对图库图像或下载文档没有任何问题.但是当我从谷歌驱动器中选择一个文件时,我无法获得路径.这是google drive uri"content://com.google.android.apps.docs.storage/document/acc%3D25%3Bdoc%3D12"你能帮我解决一下吗?

这也是我的"getPath"功能.

public static String getPath(final Context context, final Uri uri) {

    // check here to KITKAT or new version
    final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;

    // DocumentProvider
    if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {

        // ExternalStorageProvider
        if (isExternalStorageDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            final String type = split[0];

            if ("primary".equalsIgnoreCase(type)) {
                return Environment.getExternalStorageDirectory() + "/"
                        + split[1];
            }
        }
        // DownloadsProvider
        else if (isDownloadsDocument(uri)) {

            final String id = DocumentsContract.getDocumentId(uri);
            final …
Run Code Online (Sandbox Code Playgroud)

android uri filepath google-drive-android-api

8
推荐指数
3
解决办法
5103
查看次数