我正在编写一个具有即时消息功能的应用程序.用户可以在IM功能中写入文本或共享图像.当图像存储在设备中时,图像的文本数据和文件名存储在sqlite文件中.
由于我的服务器不会保留数据,因此当用户切换到新设备时,用户将无法获得聊天记录.通过参考whatsapp,他们允许用户定期将聊天记录和图像备份到Google云端硬盘,并从驱动器中获取数据,如下图所示.
当我去我自己的谷歌驱动器时,我会发现"Whatsapp"已连接到我的谷歌驱动器,如下所示.
我不熟悉Android中的Google Drive API,我想以与Whatsapp相同的方式备份我的sqlite数据库和图像.我知道有关sqlite数据库备份到Google云端硬盘的问题很少,但它似乎只包含部分代码,这使初学者很难理解.
是否会在github上有任何示例项目,有关stackoverflow或教程的问题,这将使我能够学习如何在Android中逐步以编程方式备份sqlite数据库和图像?
此外,我很惊讶地看到只有whatsapp连接到我的Google云端硬盘,但没有更多其他应用,所以我不知道第三方开发者是否会拥有与Google云端硬盘相同的访问权限并以与WhatsApp的.
这是故事.大约三年前,我已将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
我开发了一个 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) 我在新版Google云端硬盘Android API中的授权流程如下:
奇迹般有效.现在重复以切换帐户为目标:
在这里,我没有机会进入AccountSelectDialog,因为我从未使用'result'来获取onConnectionFailed()来调用startResolutionForResult().这次我错过了什么?
我想发送我的内部存储中存在的多个图像,当我选择该文件夹时,我想将该文件夹上传到谷歌驱动器.我已经尝试了这个谷歌驱动器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?
每当我在第一个应用程序启动周期中第一次运行代码时
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) 我想从谷歌驱动器下载文件.为此,我已在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)
我也尝试使用输出流但无法将数据保存到文件中.
我试过搜索这个,但找不到任何有用的链接,可以指导我如何下载和存储文件.
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_ACCOUNTS并MANAGE_ACCOUNTS从清单完全.不过,Android 5,Android 6和Android 8都可行.在运行之前,我有清晰的缓存和清晰的应用程序存储空间.
那么,GET_ACCOUNTSGoogle Drive REST API仍然需要运行时权限请求吗?
android google-api google-drive-api google-drive-android-api
我在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
我正在使用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 ×9
google-api ×2
file ×1
file-manager ×1
filepath ×1
image ×1
rest ×1
sqlite ×1
uri ×1