Gboard 贴纸搜索未返回结果

2024-01-19

通过应用程序索引,我将贴纸包添加到 GBoard,但 GBoard 搜索无法按关键字找到我的贴纸。

new Indexable.Builder("Sticker")
   .setName("Bye")
   .setImage("http://www.snoopysticker.com?id=1234")
   .setUrl("http://sticker/canonical/image/bye")
   .setDescription("A sticker for Bye")
   .put("keywords", "bye", "snoopy", "see ya", "good bye")
   .put("isPartOf",
        new Indexable.Builder("StickerPack")
          .setName("Snoopy Pack")
          .build())
   .build())};

问题出在代码的另一部分,因为您上面发布的内容在以下改编自的示例中效果很好Google 的贴纸示例项目 https://github.com/firebase/quickstart-android/blob/master/app-indexing/app/src/main/java/com/google/samples/quickstart/app_indexing/AppIndexingUtil.java:

public static void clearStickers(FirebaseAppIndex firebaseAppIndex) {
    Task<Void> task = firebaseAppIndex.removeAll();
    task.addOnSuccessListener(__ -> Log.i(TAG, SUCCESS_IN_CLEARING_STICKERS));
    task.addOnFailureListener(e -> Log.i(TAG, FAILED_TO_CLEAR_STICKERS, e));
}

public static void setStickers(final Context context, FirebaseAppIndex firebaseAppIndex) {
    try {
        List<Indexable> stickers = getIndexableStickers(context);
        Indexable stickerPack = getIndexableStickerPack(context);

        List<Indexable> indexables = new ArrayList<>(stickers);
        indexables.add(stickerPack);

        Task<Void> task = firebaseAppIndex.update(
                indexables.toArray(new Indexable[indexables.size()]));
        task.addOnSuccessListener(__ -> Log.i(TAG, SUCCESS_IN_INSTALLING_STICKERS));
        task.addOnFailureListener(e -> Log.i(TAG, FAILED_TO_INSTALL_STICKERS, e));

    } catch (IOException | FirebaseAppIndexingInvalidArgumentException e) {
        Log.e(TAG, ERROR_IN_SETTING_STICKERS, e);
    }
}

private static Indexable getIndexableStickerPack(final Context context)
        throws IOException, FirebaseAppIndexingInvalidArgumentException {
    List<Indexable> indexables = StreamSupport
            .stream(getStickerBuilders(context))
            .map(IndexableBuilder::build)
            .collect(Collectors.toList());

    StickerPackBuilder stickerPackBuilder = Indexables.stickerPackBuilder()
            .setName(STICKER_PACK_NAME)
            // Use the first sticker as the hero for the pack
            .setUrl(String.format(STICKER_PACK_URL_PATTERN, 0))
            // Defaults to the first sticker in "hasSticker". Used to select between sticker
            // packs so should be representative of the sticker pack.
            .setImage(StickersDataFactory.getAllStickerReference().get(0).getURL())
            .put("hasSticker", indexables.toArray(new Indexable[indexables.size()]))
            .setDescription(STICKER_PACK_NAME);
    return stickerPackBuilder.build();
}

private static List<Indexable> getIndexableStickers(final Context context)
        throws IOException, FirebaseAppIndexingInvalidArgumentException {
    List<Indexable> indexableStickers = new ArrayList<>();
    List<Indexable.Builder> stickerBuilders = getStickerBuilders(context);

    for (Indexable.Builder stickerBuilder : stickerBuilders) {
        stickerBuilder.put("keywords", getKeywordsForSticker(context, null))
                .put("isPartOf", new Indexable.Builder("StickerPack").setName(STICKER_PACK_NAME) .build());

        indexableStickers.add(stickerBuilder.build());
    }

    return indexableStickers;
}

private static List<Indexable.Builder> getStickerBuilders(final Context context)
        throws IOException, FirebaseAppIndexingInvalidArgumentException {
    List<Indexable.Builder> stickerBuilders = new ArrayList<>();

    // Start from 1 because the first sticker will be used as hero for the pack
    for (int i = 1; i < StickersDataFactory.getAllStickerReference().size(); i++) {
            stickerBuilders.add(new Indexable.Builder("Sticker")
                    .setName(StickersDataFactory.getAllStickerReference().get(i).getName())
                    .setUrl(String.format(STICKER_URL_PATTERN, i))
                    .setImage(StickersDataFactory.getAllStickerReference().get(i).getURL())
                    .setDescription("Random description")
                    .put("keywords", getKeywordsForSticker(context, StickersDataFactory.getAllStickerReference().get(i)))
                    .put("isPartOf", new Indexable.Builder("StickerPack").setName(STICKER_PACK_NAME) .build()));
    }

    return stickerBuilders;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gboard 贴纸搜索未返回结果 的相关文章

随机推荐

  • 使用预定义的过滤器过滤 android ListView

    我想为 ListView 实现预定义的过滤器 我的 ListView 将包含数字 并且会有一个过滤器图标 单击该图标应显示 显示奇数 显示偶数 和 显示全部 等选项 如何在单击 过滤器 图标时显示弹出对话框 如果这是使用简单的弹出对话框实现
  • 使用 EmacsClient 创建带有文本的新缓冲区

    我有一个程序可以将文本发送到任何其他程序以进行进一步分析 例如 sed grep 等 我希望它将数据发送到 Emacs 并在那里进行分析 我该怎么做呢 EmacsClient 默认采用文件名 这是一个数据字符串而不是文件 我真的不想创建和删
  • PowerShell 远程处理序列化和反序列化

    用于从 PowerShell 序列化和反序列化对象 由 PowerShell Remoting 执行 的例程是否可用 我想避免将对象写入磁盘 使用 Export CliXML 并使用 Import CliXML 读回 基本上 我想获取反序列
  • Android WorkManager 不会触发两个计划工作线程之一

    我的应用程序中安排了两个定期工作人员 其中一名工作人员在 24 小时后重复 另一名工作人员在 15 分钟后重复 最初 在全新安装时 一切按预期工作 但几天后 我在 2 台设备 共 5 台 上遇到了问题 24 小时工作人员被正确触发 但 15
  • 在 Hyperledger Fabric Chaincode 中使用 cron 作业

    我正在尝试在我的链代码中设置一个 cron 作业以 24 小时间隔运行 我正在尝试使用以下库来设置调度程序 https github com jasonlvhit gocron https github com jasonlvhit goc
  • 条件键控连接/更新并更新匹配的标志列

    这与question https stackoverflow com questions 29658627 conditional binary join and update by reference using the data tab
  • CMake 无法确定目标的链接器语言 - C++

    我正在尝试开发一个供私人使用的引擎 我正在使用 CMake 因为我打算将来使其成为多平台 但是开始出现一个我以前从未遇到过的错误 我尝试将项目 IEngine 更改为项目 IEngine CXX 如堆栈溢出的其他问题中所述 但错误仍然存 在
  • 执行 bash 文件时出现问题

    你好呀 我在学习结合 sh 文件和 PHP 时遇到了一些问题 我创建了一个文件 test sh 并在该文件中调用了一个名为 test php 的 PHP 文件 如果我双击 sh 文件 那么它会完美运行 但是当我尝试从终端运行它时 我会收到
  • 如何在进度条标签内添加标签?

    我想在进度条标签中添加一个标签 就像这个漂亮的例子一样 假设蓝色是值 红色是最大值 我怎样才能在里面添加一个标签 比如我的 35 使用CSSposition relative将文本移动到栏上 对于短杆 一个快速而肮脏的解决方案是 posit
  • 是否可以使用 GraphQLList 从多个表中获取数据

    在 GraphQL 中 我们可以在 GraphQLList 中写入对象类型并获取所有字段 我正在使用关联 它正在连接两个表 但我无法获取两个表的字段 它只接受我在 GraphQLList 中编写的字段 因为我想要数据列表 这是代码 film
  • REST如何传递空路径参数?

    我正在建造REST网络应用程序使用Netbean 7 1 1 Glassfish 3 1 2 我有2个网址 http myPage resource getall name get some data by name http myPage
  • gensim WikiCorpus 的问题 - 将 chunkize 别名为 chunkize_serial; (__mp_main__ 而不是 __main__?)

    我对 Python 和一般编码都很陌生 所以我似乎遇到了一个问题 我正在尝试运行这段代码 归功于马修 梅奥 整个事情都可以找到here https www kdnuggets com 2017 11 building wikipedia t
  • 在 Canvas Fabric JS 元素上添加删除按钮

    您好 我想使用 FabricJS 在元素中添加删除按钮 我有一个例子 我尝试添加这部分代码 但是当我调整图像大小时 删除按钮不会保留在原位 http jsfiddle net wxao1on8 13 http jsfiddle net wx
  • 如何通过 Google Cloud 调试在 Docker 容器内运行的 Nodejs 应用程序

    我发现谷歌提供了一些指导方针如何在自定义运行环境上运行 Nodejs https cloud google com solutions nodejs 一切看起来都很好 我正在设法在本地计算机上启动我的 Nodejs 应用程序gcloud p
  • ActiveMQ 警告:帧大小为 1 GB,大于允许的最大大小 100 MB

    我正在尝试从旧版 jms 代理切换到 ActiveMQ 我无法弄清楚的一件事是日志中的警告每小时一次 WARN Transport Connection to tcp 127 0 0 1 38542 failed java io IOExc
  • 如何在使用 pytest-repeat 时动态捕获测试内部的迭代次数

    我使用 pytest repeat 多次执行我的 selenium 脚本 我需要在执行过程中捕获迭代次数并利用它 我探索了 pytest mark pytest collect 和 pytest Collector class Teston
  • 在Python中向上移动一个目录

    有没有一种简单的方法可以使用一行代码在 python 中上移一个目录 类似的东西cd 在命令行中 gt gt gt import os gt gt gt print os path abspath os curdir C Python27
  • 运行 play 框架时不支持 Major.minor 版本 51.0

    我知道存在版本冲突 只是希望有人告诉我如何解决它 在之前的 stackoverflow 帖子中 没有人告诉我们解决方案 版本 Ubuntu 12 04 1 LTS java 1 6 0 24 OpenJDK javac 1 7 0 07 O
  • R 中用于大型复杂调查数据集的方法?

    我不是调查方法学家或人口统计学家 但我是 Thomas Lumley 的 R 调查包的狂热粉丝 我一直在处理一个相对较大的复杂调查数据集 即医疗保健成本和利用项目 HCUP 国家急诊室样本 NEDS https www hcup us ah
  • Gboard 贴纸搜索未返回结果

    通过应用程序索引 我将贴纸包添加到 GBoard 但 GBoard 搜索无法按关键字找到我的贴纸 new Indexable Builder Sticker setName Bye setImage http www snoopystick