java.awt.Desktop类

时间:2018-10-17 08:54:40

标签: java android google-api google-oauth

我正在使用适用于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进行身份验证?

2 个答案:

答案 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 中。