使用 Codename One 分享按钮时,没有应用程序可以在 Android 上执行此操作

Getting no application can do this action on Android while using Codename One share button

My Codename One 应用程序具有一个 ShareButton,其用法如下:

 // Share this report on social networks (text plus screenshot)
    ShareButton shareReportButton = new ShareButton();
    shareReportButton.setText("Share this report!");
    shareReportButton.getAllStyles().setBorder(
                    RoundBorder.create().rectangle(true));
    FontImage.setMaterialIcon(shareReportButton, FontImage.MATERIAL_SHARE);
    shareReportButton.getStyle().setBgColor(ParametresGeneraux.accentColor);
    shareReportButton.getPressedStyle().setBgColor(ParametresGeneraux.darkPrimaryColor);

    shareReportButton.setTextToShare("I reported this via the great app ABCD "!"
    );
    shareReportButton.setImageToShare(currentReport.getPhotoPath(), ImageIO.FORMAT_PNG);

我在模拟器下按预期工作,但在实际的 Android 4.4 设备上我得到一个带有 "No app can do this action" 的对话框菜单。

请注意,可以与本机应用程序共享照片等。

我找不到任何要添加的构建提示 in the doc。我应该怎么做才能使共享按钮提供一种在社交网络上共享文本 + 照片的方式?

感谢任何帮助,

此致

编辑

根据@James H 和@Diamond 的回答,图像类型必须设置为mime 类型。因此,将 ImageIO.FORMAT_PNG 替换为 "image/jpg" 会填充共享菜单。

为了完整起见,请注意如文档中所述

an image must be stored using the FileSystemStorage API and shouldn't use a different API like Storage!

因此,即使照片在缓存中,您也必须将其复制到您的主文件夹,然后在 ShareButton 中使用此复制版本。

我认为问题可能在于

setImageToShare(String imagePath, String imageMimeType)

正在寻找不同格式的 Mime 描述,例如:"image/png"

我不确定 ImageIO.FORMAT_PNG 是否以这种方式工作。查看 JavaDoc 中的示例,它使用:

sb.setImageToShare(imageFile, "image/png");

使用本机共享功能并通过执行以下操作检查是否支持本机共享:

// Share this report on social networks (text plus screenshot)
Button shareReportButton = new Button("Share this report!");
shareReportButton.getAllStyles().setBorder(create().rectangle(true));
FontImage.setMaterialIcon(shareReportButton, FontImage.MATERIAL_SHARE);
shareReportButton.getStyle().setBgColor(ParametresGeneraux.accentColor);
shareReportButton.getPressedStyle().setBgColor(ParametresGeneraux.darkPrimaryColor);
shareReportButton.addActionListener(e -> {
    if (Display.getInstance().isNativeShareSupported()) {
        Display.getInstance().share("I reported this via the great app ABCD ", currentReport.getPhotoPath(), "image/png"); // Or "image/jpg"
    } else {
        ToastBar.showErrorMessage("Your phone doesn't support sharing...");
    }
});