[英]java.awt.Desktop class
我正在使用适用于 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
的authorize()
迟早会调用它的内部函数browse()
。 此函数需要 Desktop 类。
有没有办法为android获取那个类? 或者是否有另一种解决方法可以通过 Google 进行身份验证?
我现在自己解决了。 我没有尝试从java.awt.Desktop获取Desktop类,而是覆盖了授权方法:
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。
我希望,我能够帮助遇到这个问题的任何人。
Dnsiv 答案正常工作,但我也必须将 FLAG_ACTIVITY_NEW_TASK 添加到我的 Intent 中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.