我有活动A实例化GoogleApiClient,连接并开始在AsyncTask中处理可能需要几秒或几分钟.
同时,用户触发活动B,通过连接实例化自己的GoogleApiClient.
现在的问题是:能在应用已连接,同时工作GoogleApiClient的多个实例,或者我应该保持我自己的信号灯的应用程序单身?
在从Android Studio 0.9迁移到1.0期间,我不得不更改该子句
buildTypes {
release {
- runProguard true
+ minifyEnabled true
}
Run Code Online (Sandbox Code Playgroud)
按此处推荐.
我的应用正在运行标准同步适配器
public class SyncAdptr extends AbstractThreadedSyncAdapter {
private static Context mCtx;
public SyncAdptr(Context ctx, boolean autoInit) {
super(ctx, autoInit); mCtx = ctx;
}
static void syncStart(Account gooAcct, String authority) {
...
ContentResolver.setSyncAutomatically(gooAcct, authority, true);
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
作为服务:
public class SyncService extends Service {
private static final Object sSyncAdapterLock = new Object();
private static SyncAdptr sAndyScanSyncAdapter = null;
@Override
public void onCreate() …Run Code Online (Sandbox Code Playgroud) 我在新版Google云端硬盘Android API中的授权流程如下:
奇迹般有效.现在重复以切换帐户为目标:
在这里,我没有机会进入AccountSelectDialog,因为我从未使用'result'来获取onConnectionFailed()来调用startResolutionForResult().这次我错过了什么?
我一直在开发使用Google Drive API的Android应用.它最初是从这里的quickstart示例构建的.简化的API调用序列(此处未显示正确的错误处理)是:
GoogleAccountCredential cred = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE_FILE);
cred.setSelectedAccountName("...");
Drive drvSvc = new Drive.Builder (AndroidHttp.newCompatibleTransport(), new GsonFactory(), cred).build();
FileList gooLst = drvSvc.files().list().setMaxResults(MAX_DOWN).setQ(_rqst).execute();
Run Code Online (Sandbox Code Playgroud)
它一直工作正常,我即将发布我的应用程序.但突然之间,在Drive API更新后,我收到了警告
不推荐使用GoogleAccountCredential类型中使用OAuth2(Context,String,String ...)的方法
发生了什么?还有另一种获取凭证的方法吗?是否有可在任何地方使用的快速启动示例的编辑版本?
提前感谢您的任何澄清.肖恩
问题是来自' DriveId.getResourceId() ' 的'resourceID' 在新创建的文件(' DriveFolder.createFile(GAC,meta,cont) '的产品)上不可用(返回NULL ).如果通过常规列表或查询过程检索文件,则'resourceID'是正确的.
我怀疑这是一个时间/延迟问题,但目前尚不清楚是否存在强制刷新的应用程序操作." Drive.DriveApi.requestSync(GAC) "似乎没有任何效果.
有没有办法在Android应用程序中启动谷歌驱动器的文件选择器 - 做类似于这个http://googleappsdeveloper.blogspot.com/2012/08/allowing-user-to-select-google-drive.html.我需要允许用户从谷歌驱动器中选择文件,所以我可以在我的应用程序中使用它们的字节.谢谢.
android filepicker google-drive-api google-drive-android-api
更新(2015年5月):
"垃圾"功能已在GDAA中实施,使下面的问题无关紧要.
原始问题:
当我使用新的"Google Drive Android API"(GDAA)时,我遇到了一些我无法弄清楚的差异.基本上,我有一个使用"com.google.api.services.drive"界面(插入,补丁,更新)的旧应用程序,我很乐意将其移植到GDAA.
首先,GDAA与drive.google.com网络应用.
使用旧服务,我使用了DriveScopes.DRIVE_FILE范围,因此我假设了类似的行为/结果.使用旧的"DriveScopes.DRIVE_FILE"创建的文件可以由我("驱动程序所有者")在" https://drive.google.com "中删除(我假设我的范围是DRIVE那里),后续的Android应用查询将无法找到他们.它表现得像我期望的那样:
使用新的GDAA,它似乎不起作用.这让我想到了第二点:
DELETE/TRASH功能.
我试图测试CRUD功能,根本找不到DELETE(再次,它可能是我的无知/短视).从"drive.google.com"中删除它们会让它们在那里隐身,但Android应用仍会看到它们.元数据可以查询"isTrashed()",但"MetadataChangeSet.Builder"中没有任何内容可以让我删除/删除它们,只有setMimeType(),setStarred(),setTitle().
我迷路了,请帮忙.
我正在滥用这个论坛来征求GDAA通知功能的预期用途的解释(来自GDAA支持团队).这里的文档足以实现它,并且两个相关的SO问题22980497和22778501涉及相同的主题.但我无法理解它的用途.这是一个例子.
那么,有什么好处呢?某个特定设备上的应用程序知道它只是修改了一个对象,不需要通知.另一方面,如果它通知另一个设备修改了具有CONSIDERABLE(分钟)延迟的对象,那么如何实现同步呢?或者如何使用呢?我被建议使用'requestSync()',但没有看到任何差异(此外,它与直接轮询有何不同).
今天,我可以通过轮询可靠地同步多个设备,但无法使其与未按时通知的通知一起使用.
我假设ModifiedDate搜索字段是修改日期(显然)或上传到驱动器的日期。有没有办法在其本机系统上保留文件的原始创建日期?或者有没有可能修改这个字段?谢谢你,肖恩
在测试SO 22295903中讨论的删除,垃圾功能时,我遇到了这个问题.
1 /创建包含内容的文件
GoogleApiClient _gac;
DriveFile createFileWait(DriveFolder fldr, String name, String mime, byte[] buff) {
DriveFile drvFile = null;
try {
ContentsResult rslt = Drive.DriveApi.newContents(_gac).await();
if (rslt.getStatus().isSuccess()) {
Contents cont = rslt.getContents();
cont.getOutputStream().write(buff);
MetadataChangeSet meta = (mime == null) ?
new MetadataChangeSet.Builder().setTitle(name).build() :
new MetadataChangeSet.Builder().setTitle(name).setMimeType(mime).build();
drvFile = fldr.createFile(_gac, meta, cont).await().getDriveFile();
}
} catch (Exception e) {}
return drvFile;
}
Run Code Online (Sandbox Code Playgroud)
2 /使用查询检索文件(它的标题):
ArrayList<DriveId> findAll(String title, String mime, DriveFolder fldr) {
ArrayList<DriveId> dIDs = null;
if (isConnected()) …Run Code Online (Sandbox Code Playgroud)