java.awt.Desktop类

dns*_*siv 5 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");
Run Code Online (Sandbox Code Playgroud)

我现在遇到的问题是Android仅支持JDK类的子集。因此,不支持java.awt.Desktop。但我真的需要这个类,因为AuthorizationCodeInstalledAppauthorize()即将或更高版本调用它的实习生功能browse()。此功能需要Desktop类。

有没有办法为Android获取该类?还是有其他解决方法可以通过Google进行身份验证?

dns*_*siv 11

我现在自己解决了。我没有尝试从 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);
            }
        };
Run Code Online (Sandbox Code Playgroud)

我这样做的原因是因为 authorize() 将调用 onAuthorization() 它将调用 browse(),它检查是否支持桌面。因此,通过重写 onAuthorization() 方法,我将不再需要该类。我重写的类将在您的 android 设备中使用该授权 URL 启动一个新的 Browserwindow。

我希望,我能够帮助遇到此问题的任何人。