当前位置: 首页 > 知识库问答 >
问题:

Google Drive REST API通知对应用程序文件夹中的更改无效

韩弘壮
2023-03-14

根据文档,应该可以使用setspaces(“AppDataFolder”)注册一个通知通道,用于更改我的应用程序的应用程序文件夹。

但是,在设置频道时,我只得到初始的sync通知,而在应用程序文件夹中更改某些内容时,则不会得到change通知。

这就是我如何设置通道的,其中mdrivecom.google.api.services.drive.drive的完全初始化和授权的实例

channelId = UUID.randomUUID().toString();
channelExpiration = System.currentTimeMillis() + CHANNEL_LIVETIME_MILLIS;
Channel channel = new Channel();
channel.setType("web_hook");
channel.setId(channelId);
channel.setAddress(DRIVE_API_CALLBACK_RECEIVER_URL);
channel.setToken("...");
channel.setExpiration(channelExpiration);
Channel result = mDrive.changes().watch(channel).setSpaces("appDataFolder").execute();

共有1个答案

呼延辰龙
2023-03-14

你有设置这个的范围吗?确保您有足够广泛的范围来包括“App DataFolder”。我的意思是你应该能够从这里得到一些结果:

/**
 * Print metadata for the Application Data folder.
 *
 * @param service Drive API service instance.
 */
private static void printApplicationDataFolderMetadata(Drive service) {
  try {
    File file = service.files().get("appfolder").execute();

    System.out.println("Id: " + file.getId());
    System.out.println("Title: " + file.getTitle());
  } catch (IOException e) {
    System.out.println("An error occured: " + e);
  }
}

我想以上可能是你的问题。在设置作用域时,请确保包含drive.appfolder或更正式的

https://www.googleapis.com/auth/drive.appfolder

此外,是否检查结果是否为NULL?您确实应该将通道result=...行放在try{}catch(IOExeption e){}中,如果有类似本例(从这里开始)的错误,则打印错误。

  /**
   * Watch for all changes to a user's Drive.
   *
   * @param service Drive API service instance.
   * @param channelId Unique string that identifies this channel.
   * @param channelType Type of delivery mechanism used for this channel.
   * @param channelAddress Address where notifications are delivered.
   * @return The created channel if successful, {@code null} otherwise.
   */
  private static Channel watchChange(Drive service, String channelId,
      String channelType, String channelAddress) {
    Channel channel = new Channel();
    channel.setId(channelId);
    channel.setType(channelType);
    channel.setAddress(channelAddress);
    try {
      return service.changes().watch(channel).execute();
    } catch (IOException e) {
      e.printStackTrace();
      // ADD A LOG OR PRINT STATEMENT HERE 
      Log.e("DRIVEAPI", "Error: " + e.toString())
    }
    return null;
  }

您的代码应该如下所示:

channelId = UUID.randomUUID().toString();
channelExpiration = System.currentTimeMillis() + CHANNEL_LIVETIME_MILLIS;
Channel channel = new Channel();
channel.setType("web_hook");
channel.setId(channelId);
channel.setAddress(DRIVE_API_CALLBACK_RECEIVER_URL);
channel.setToken("...");
channel.setExpiration(channelExpiration);
try {
    Channel result = mDrive.changes().watch(channel).setSpaces("appDataFolder").execute();
    if(result != null) {
        // do whatever you want with result Channel
    } else {
        Log.e("DRIVEAPI", "Error: result is null for some reason!");
    }
} catch (IOException e) {
    e.printStackTrace()
    Log.e("DRIVEAPI", "Error: " + e.toString());
}
 类似资料:
  • 问题内容: 我正在经历Angular 2 的5分钟快速入门。但是,我的应用程序驻留在文件夹中,而不是存储库的根目录中,并且当我运行该应用程序时,它试图在根目录中查找文件。我在读了和文件表明,它使用我可以重新用在我的仓库。我做到了,这就是我的配置: 根据日志,它使用指定的配置: 我也尝试通过bs-config.js进行覆盖 但是,Angular应用程序仍在端口3000上打开,并且忽略了配置中定义的b

  • 我想创建一个通知,当它点击时,会将我的应用程序带到前台,但不会更改(重新加载或导航出)显示的最后一个活动。 我试过: 但在新的Android4.3中,应用程序被推到了前台,但它也启动了一个新的实例,我不想要这个。 我希望我的应用程序将从上次显示的活动继续。 如何做到这一点?

  • 我已经在谷歌驱动器的应用程序文件夹中创建了一个文件。 编写文件的代码 读取文件的代码 driveContentsResult的状态为false。我看过谷歌的演示,但找不到解决方案。谁能帮我找出我做错了什么,或者我可以尝试的其他方法是什么。

  • 当我使用writeTofile代码,然后重新启动后,应用程序文件找不到!我追踪到 并且它是不断变化的,例如首先打开app,输出: VAR/移动/容器/数据/应用/3AD0B8BB-F15B-4290-ABD5-5E0D1319C657 我用这些代码保存我的视频数据 因此它们是不同且未找到文件

  • 问题内容: 我想更改特定文件夹中文件的扩展名。我在论坛上阅读了有关此主题的信息。使用“确实”的想法,我编写了以下代码,我希望它可以工作,但不能。我很感谢您为我的失误提供任何指导。 问题答案: 在对源文件是不必要的,因为只需要在源和目标路径来完成这项工作。而且,始终返回,因此调用其返回值没有任何意义。 我简单地删除了两个。检查是否适合您。

  • 问题内容: 我刚刚创建了一个flask应用程序,到目前为止,我已经为“ Hello world!”安装了一个路由器。模板。 我想增加一点(很多)功能,但是我想知道如何构造应用程序目录。 构建Flask应用的最常见方法是什么?例如,我应该为所有路线创建一个吗?的东西去哪儿了?模型应该在models.py吗? 问题答案: 你应该在Flask文档的“模式”部分中查看“更大的应用程序”页面:http :