我一直在研究使用Google Drive API的Android应用。它最初是从quickstart example here构建的。简化的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();
它一直工作正常,我即将发布我的应用程序。但突然之间,在Drive API更新后,我收到了警告
该方法使用了类型的OAuth2(Context,String,String ...) GoogleAccountCredential已弃用
发生了什么事?还有另一种获取凭证的方法吗?在任何地方都有quickstart example的编辑版本吗?
提前感谢您的任何澄清。肖恩
答案 0 :(得分:27)
所以,对我自己的问题的简单回答是
取代:
GoogleAccountCredential crd = GoogleAccountCredential.usingOAuth2(this,DriveScopes.DRIVE_FILE);
与
GoogleAccountCredential crd = GoogleAccountCredential.usingOAuth2(这一点, Arrays.asList(DriveScopes.DRIVE_FILE));
答案 1 :(得分:2)
我猜测你是通过遵循Google Drive QuickStart的代码示例来解决此异常的。如果是这样,你可能会发现我必须修改的以下内容。
该文档使用了向Android项目添加库的旧方法。使用最新的ADT执行时将失败。您将能够编译并上传到设备/模拟器,但在执行时您将获得NoClassDefFoundError。
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/AccountPicker;
要解决此问题,您应该将google-play-services.jar
文件复制粘贴到libs
文件夹中。
直到下一个错误。然后,我收到了IllegalStateException
,其中包含在包含google-play-services版本的清单中添加元标记的说明。
因此,在清单的应用标签中添加:
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
在其中一个资源文件(res/values/a-file-here.xml
)中添加以下内容:
<integer name="google_play_services_version">4030500</integer>
在我的情况下,lib匹配此版本。如果您在此处输入了错误的版本,则会显示错误,显示要指定的正确版本。所以一定要检查输出。
最后我在应用程序中得到了oauth的提示,只是为了找出示例应用程序仍然缺少权限。参考错误:
java.io.FileNotFoundException: /storage/emulated/0/Pictures/IMG_20131211_110629.jpg: open failed: EACCES (Permission denied)
示例中列出的权限旁边:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
还在清单中添加WRITE_EXTERNAL_STORAGE权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
如果您在根本原因的某个地方com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException
收到Unknown
例外,则应检查Google API console中的设置。我在包裹不匹配时收到此错误。
另一个感兴趣的链接是oauth2 documentation和google api playground。