繁体   English   中英

java.awt.Desktop 类

[英]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。 但我真的需要这个类,因为AuthorizationCodeInstalledAppauthorize()迟早会调用它的内部函数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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM