我正在使用适用于Android的Google API。由于适用于Android的Google API / G Suite快速入门参考了他们的Java示例,因此我正在尝试实现这一点:
GoogleAuthorizationCodeFlow flow =
new GoogleAuthorizationCodeFlow.Builder(
ReadMail.HTTP_TRANSPORT, ReadMail.JSON_FACTORY, clientSecrets, ReadMail.SCOPES)
.setDataStoreFactory(ReadMail.DATA_STORE_FACTORY)
.setAccessType("offline")
.build();
AuthorizationCodeInstalledApp authCodeInstalledApp = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver());
Credential credential = authCodeInstalledApp.authorize("user");
我现在遇到的问题是Android仅支持JDK类的子集。因此,不支持java.awt.Desktop。
但是我确实需要这个类,因为AuthorizationCodeInstalledApp
的{{1}}不久将调用其内部函数authorize()
。此功能需要Desktop类。
有没有办法为Android获取该类?还是有其他解决方法可以通过Google进行身份验证?
答案 0 :(得分:3)
我现在自己解决了。我没有尝试从java.awt.Desktop获取Desktop类,而是改写了on Authorization方法:
AuthorizationCodeInstalledApp ab = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()){
protected void onAuthorization(AuthorizationCodeRequestUrl authorizationUrl) throws IOException {
String url = (authorizationUrl.build());
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
main_Activity.startActivity(browserIntent);
}
};
之所以这样做,是因为authorize()将调用onAuthorization(),后者将调用Browse(),后者会检查是否支持Desktop。 因此,通过重写onAuthorization()方法,我将不再需要该类。 我重写的课程将只在您的android设备中使用该授权URL启动一个新的Browserwindow。
我希望,我能够帮助遇到此问题的任何人。
答案 1 :(得分:0)
Dnsiv answer 正常工作,但我也必须将 FLAG_ACTIVITY_NEW_TASK 添加到我的 Intent 中。